diff --git a/main/objects.inv b/main/objects.inv index aa74ba9351..0e186ebb37 100644 Binary files a/main/objects.inv and b/main/objects.inv differ diff --git a/main/search/search_index.json b/main/search/search_index.json index 2c3ad67b2f..32c45b6e32 100644 --- a/main/search/search_index.json +++ b/main/search/search_index.json @@ -1 +1 @@ -{"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:
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:
Clientt8n
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:
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":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py
includes an EOF test case (#610).tests/frontier/opcodes/test_dup.py
now includes EOF parametrization (#610).tests/frontier/opcodes/test_all_opcodes.py
(#748).consume hive
command is now available to run all types of hive tests (#712).index.json
by default (#716)..meta/
now stores all fixture metadata files by default (#721).fill
command index generation issue due to concurrency (#725).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).with_all_system_contracts
marker, which helps parametrize tests with all contracts that affect the chain on a system level (#739).Conditional
and Switch
now support EOF by adding parameter evm_code_type
(#610).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).with_all_*
markers to specify a lambda function that filters the parametrized values (#739).extend_with_defaults
utility function, which helps extend test case parameter sets with default values. @pytest.mark.parametrize
(#739).Container.Init
to ethereum_test_types.EOF.V1
package, which allows generation of an EOF init container more easily (#739).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).--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).@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).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).--help
flag for consume (#745).fixtures_eip7692.tar.gz
and fixtures_eip7692-prague.tar.gz
respectively (#743).pyproject.toml
(#764).eof_tests
may now contain multiple exceptions in the \"exception\"
field in the form of a pipe (|
) separated string (#759).test_create_selfdestruct_same_tx_increased_nonce
which tests self-destructing a contract with a nonce > 1 (#478).test_double_kill
and test_recreate
which test resurrection of accounts killed with SELFDESTRUCT
(#488).test_dupn.py
and test_swapn.py
(#502).!=
operator for FixedSizeBytes
(#477).pydantic
for type checking in most test types (#486, #501, #508).Op.PUSH1(1) == Op.PUSH1[1] == b\"\\x60\\x01\"
(#513)evmone-eofparse
during fill
execution (#519).--traces
support when running with Hyperledger Besu (#511).--tb=short
) for failure summaries in the test report for more compact terminal output (#542).fill
command now generates HTML test reports with links to the JSON fixtures and debug information (#537).fill
and use them in consume
-generated Hive test reports (#579).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).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).gentest
to use ethereum_test_tools.rpc.rpc
by adding to get_transaction_by_hash
, debug_trace_call
to EthRPC
(#568).fill
via --output=fixtures.tgz
(#627).ethereum_test_tools
library has been split into multiple libraries (#645).transaction
now uses the proper zero-padded hex number format for fields maxPriorityFeePerGas
, maxFeePerGas
, and maxFeePerBlobGas
_info
field) are now calculated by removing the \"_info\" field entirely instead of it being set to an empty dict.fixtures_eip7692.tar.gz
which contains all EOF fixtures (#573).solc-select
for tox when running locally and within CI (#604).fixtures.tar.gz
has been renamed to fixtures_stable.tar.gz
(#573)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).\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).
solc --evm-version
when compiling Yul code (#418).fill -m yul_test
which failed to filter tests that are (dynamically) marked as a yul test (#418).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).Opcodes
enum now contains docstrings with each opcode description, including parameters and return values, which show up in many development environments (#424) @ThreeHrSleep.None
(#452)._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).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).Release v2.1.0 primarily fixes a small bug introduced within the previous release where transition forks are used within the new StateTest
format. This was highlighted by @chfast within #405 (#405), where the fork name ShanghaiToCancunAtTime15k
was found within state tests.
test_blob_gas_subtraction_tx()
verifying the blob gas fee is subtracted from the sender before executing the blob tx (#407).run-parallel
and shared wheel packages for tox
(#408).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":"test_sufficient_balance_blob_tx()
and test_sufficient_balance_blob_tx_pre_fund_tx()
(#379).test_run_until_out_of_gas()
for transient storage opcodes (#401).CALL
and CALLCODE
gas consumption with a positive value transfer (previously lacking coverage) (#371).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).test_insufficient_balance_blob_tx()
to correctly calculate the minimum balance required for the accounts (#379).test_invalid_blob_tx_contract_creation
(#379).BlockchainTest
s to StateTest
s (and additionally generate corresponding BlockchainTest
s) (#368, #370).StateTest
fixture format generation; StateTests
now generate a StateTest
and a corresponding BlockchainTest
test fixture, previously only BlockchainTest
fixtures were generated (#368).StateTestOnly
fixture format is now available and its only difference with StateTest
is that it does not produce a BlockchainTest
(#368).evm_bytes_to_python
command-line utility which converts EVM bytecode to Python Opcodes (#357).>
, >=
, <
, <=
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).ethereum_test_tools.TestParameterGroup
to define test parameters as dataclasses and auto-generate test IDs (#364).--single-fixture-per-file
flag to generate one fixture JSON file per test case (#331).FixtureHeader.join()
(#398).=
with _
in pytest node ids and test fixture names (#342).StateTest
, spec format used to write tests, is now limited to a single transaction per test (#361).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).fill
: Remove the --enable-hive
flag; now all test types are generated by default (#358).fill
(#342).t8n
tool branch to fill tests for development features in the readme (#338).t8n
) to go-ethereum@master (#368).A concrete example of the test name renaming and change in directory structure is provided below.
Fixture output, including release tarballs, now contain subdirectories for different test types:
blockchain_tests
: Contains BlockchainTest
formatted tests
blockchain_tests_hive
: Contains BlockchainTest
with Engine API call directives for use in hivestate_tests
: Contains StateTest
formatted tests
StateTest
, spec format used to write tests, is now limited to a single transaction per test.
=
in both node IDs (and therefore fixture names) have been replaced with _
, which may break tooling that depends on the =
character.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]
.
Pytest node ID example:
Previous node ID: tests/frontier/opcodes/test_dup.py::test_dup[fork=Frontier]
.
New node ID: tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier]
.
Fixture name example:
Previous fixture name: 000-fork=Frontier
New fixture name: tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier]
(now the same as the pytest node ID).
Fixture JSON file name example (within the release tarball):
Previous fixture file name: fixtures/frontier/opcodes/dup/dup.json
(BlockChainTest
format).
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).rlp_decoded
) to invalid blocks (#322).evm blocktest
command to verify JSON fixtures after test case execution (--verify-fixtures
) (#325).ethereum-spec-evm
(#289).This release mainly serves to update the EIP-4788 beacon roots address to 0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02
, as updated in ethereum/EIPs/pull/7672.
Please use development fixtures from now on when testing Cancun. These refer to changes that are currently under development within clients:
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":"0xbEAC020008aFF7331c0A389CB2AAb67597567d7a
(@spencer-tb in #297).fill
: --disable-hive
flag removed; replaced by --enable-hive
(@spencer-tb in #301).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.
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 Consstatetest
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.
The ethereum/execution-spec-tests repository provides releases of fixtures in various formats (as of 2023-10-16):
Release Artifact Consumer Fork/feature scopefixtures.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.
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:
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.genesisRLP
to obtain the genesis block header, if the block cannot be decoded, fail the test.genesisBlockHeader
, if any field does not match, fail the test.If blocks
contains at least one block, perform the following steps for each FixtureBlock
or InvalidFixtureBlock
:
Determine whether the current block is valid or invalid:
expectException
field is not present, it is valid, and object must be decoded as a FixtureBlock
.expectException
field is present, it is invalid, and object must be decoded as a InvalidFixtureBlock
.Attempt to decode field rlp
as the current block
Attempt to apply the current decoded block on top of the current head of the chain
Compare the hash of the current head of the chain against lastblockhash
, if they do not match, fail the test.
post
against the current state, if any do not match, fail the test.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.
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
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.
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:
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.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.
For each FixtureEngineNewPayload
in engineNewPayloads
:
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.errorCode
is present:errorCode
, otherwise fail the test.valid
is false
, verify that the directive returns status
field of PayloadStatusV1 as INVALID
, otherwise fail the test.valid
is true
, verify that the directive returns status
field of PayloadStatusV1 as VALID
, otherwise fail the test.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.
engineFcuVersion
: Number
","text":"Version of the engine_forkchoiceUpdatedVX
directive to use to set the head of the chain.
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
.
version
: Number
","text":"Version of the engine_newPayloadVX
directive to use to deliver the payload.
errorCode
: Optional
[
Number
]
","text":"Error code to be returned by the engine_newPayloadVX
directive.
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.
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.
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.
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.
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":"0x00
\"Homestead\"
","text":"0x01
0x00
\"Byzantium\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
\"Constantinople\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
\"ConstantinopleFix\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
\"Istanbul\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
\"MuirGlacier\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
\"Berlin\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
\"BerlinToLondonAt5\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x05
\"London\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
\"ArrowGlacier\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
\"GrayGlacier\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
\"Merge\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
\"MergeToShanghaiAtTime15k\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x3a98
\"Shanghai\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
\"ShanghaiToCancunAtTime15k\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x0
0x3a98
\"Cancun\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
The EOF Test fixture format tests are included in the fixtures subdirectory eof_tests
.
These are produced by the EOFTest
test spec.
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.
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 insrc/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 TYPE_4_EMPTY_AUTHORIZATION_LIST = auto()\n \"\"\"\n Transaction is type 4, but has an empty authorization list.\n \"\"\"\n TYPE_4_INVALID_AUTHORITY_SIGNATURE = auto()\n \"\"\"\n Transaction is type 4, but has an empty authorization list.\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.
ADDRESS_TOO_LONG = auto()
class-attribute
instance-attribute
","text":"Transaction to
is not allowed to be more than 20 bytes.
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).
NONCE_IS_MAX = auto()
class-attribute
instance-attribute
","text":"Transaction nonce
is not allowed to be max_uint64 - 1 (this is StateTests).
NONCE_OVERFLOW = auto()
class-attribute
instance-attribute
","text":"Transaction nonce
is not allowed to be more than uint64.
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
.
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/#ethereum_test_exceptions.TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST","title":"TYPE_4_EMPTY_AUTHORIZATION_LIST = auto()
class-attribute
instance-attribute
","text":"Transaction is type 4, but has an empty authorization list.
"},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.TYPE_4_INVALID_AUTHORITY_SIGNATURE","title":"TYPE_4_INVALID_AUTHORITY_SIGNATURE = auto()
class-attribute
instance-attribute
","text":"Transaction is type 4, but has an empty authorization list.
"},{"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 insrc/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 insrc/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.
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.
For each Fixture
test object in the JSON fixture file, perform the following steps:
pre
as the starting state allocation of the execution environment for the test.env
to configure the current execution environment.For each Fork
key of post
in the test, and for each of the elements of the list of FixtureForkPost
values:
Fork
key.indexes
values, and the transaction
object, decode the transaction to be executed.txbytes
, fail the test.Attempt to apply the transaction using the current execution environment:
expectException
is empty, fail the test.expectException
is not empty, revert the state to the pre-state.expectException
is not empty, fail the test.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.
logs
field of the current FixtureForkPost
, and fail the test if they do not match.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
.
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
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:
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.
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.
uv pip install -e .[docs]\n
"},{"location":"dev/docs/#build-the-documentation","title":"Build the Documentation","text":"One time build:
uv run mkdocs build\n
Do a pre-commit check: One time build and lint/type checking:
pip install tox-uv\ntox -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
:
uv run 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.
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:
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*
|
Build a new version and deploy it to remote (this version will then show up in the version selector list):
uv run 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:
uv run 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 )!
uv run mike deploy --push main\n
If the alias accidentally go change:
uv run mike deploy --push --update-aliases main development\n
"},{"location":"dev/docs/#viewing-and-deleting-versions","title":"Viewing and Deleting Versions","text":"List versions:
uv run mike list\n
Delete a version:
uv run 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:
uv run 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-gen-files
to add nav content for generated content.This section is auto-generated via a combination of:
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.
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:
navigation.md
.navigation.md
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:
uvx pre-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":"act
tool, docs.gh
) for authentication: linux, macos.Authenticate with the Github CLI:
gh auth login\n
bash act -j build --workflows .github/workflows/tox_verify.yaml -s GITHUB_TOKEN=$(gh auth token) --matrix python:3.10
Release builds require the ref
input to be specified. To test a release build locally:
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\" }
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
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.
Write to:
danceratopz
).spencertaylorbrown
/@techbro_ccoli
).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:
--evm-dump-dir
: Write debug information from t8n
tool calls to the specified directory.--traces
: Collect traces of the execution from the transition tool.--verify-fixtures
: Run go-ethereum's evm blocktest
command to verify the generated test fixtures.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.
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.
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.
--verify-fixtures
Examples","text":"No fixture verification performed:
fill\n
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
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
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
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
.
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
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.
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 thet8n
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.
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] [--strict-alloc]\n [--ca-start CA_START] [--ca-incr CA_INCR] [--build-name BUILD_NAME]\n [--evm-dump-dir EVM_DUMP_DIR] [--forks] [--fork FORK] [--from FROM]\n [--until UNTIL]\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\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:
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,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":"geth
/evm
build documentation.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.
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/#uvpip-installation-issues","title":"uv
/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.
Ensure go-ethereum
's evm
tool is in your path. Either build the required version, or alternatively:
sudo add-apt-repository -y ppa:ethereum/ethereum\nsudo apt-get update\nsudo apt-get install ethereum\n
More help: brew update\nbrew upgrade\nbrew tap ethereum/ethereum\nbrew install ethereum solidity\n
More help: Binaries available here:
More help:
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\npip install uv # or curl -LsSf https://astral.sh/uv/install.sh | sh\nuv sync --all-extras\nuv run solc-select use 0.8.24 --always-install\nsource .venv/bin/activate # or run `uv run fill ...`\n
Verify installation:
Explore test cases:
fill --collect-only\n
Expected console output:
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:
evm
tool is as expected (your versions may differ from those in the highlighted box).The corresponding fixture file has been generated:
head fixtures/blockchain_tests/berlin/eip2930_access_list/acl/access_list.json\n
If you encounter issues during installation, see the Installation Troubleshooting guide.
"},{"location":"getting_started/quick_start/#next-steps","title":"Next Steps","text":"--fork
flag.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.
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:
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.
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.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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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\n def keccak256(self) -> \"Bytes\":\n \"\"\"\n Return the keccak256 hash of the opcode byte representation.\n \"\"\"\n k = keccak.new(digest_bits=256)\n return Bytes(k.update(bytes(self)).digest())\n
"},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Bytes.__new__","title":"__new__(input)
","text":"Creates a new Bytes object.
Source code insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.Bytes.keccak256","title":"keccak256()
","text":"Return the keccak256 hash of the opcode byte representation.
Source code insrc/ethereum_test_base_types/base_types.py
def keccak256(self) -> \"Bytes\":\n \"\"\"\n Return the keccak256 hash of the opcode byte representation.\n \"\"\"\n k = keccak.new(digest_bits=256)\n return Bytes(k.update(bytes(self)).digest())\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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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
.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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
.
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 insrc/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
.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 TYPE_4_EMPTY_AUTHORIZATION_LIST = auto()\n \"\"\"\n Transaction is type 4, but has an empty authorization list.\n \"\"\"\n TYPE_4_INVALID_AUTHORITY_SIGNATURE = auto()\n \"\"\"\n Transaction is type 4, but has an empty authorization list.\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.
ADDRESS_TOO_LONG = auto()
class-attribute
instance-attribute
","text":"Transaction to
is not allowed to be more than 20 bytes.
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).
NONCE_IS_MAX = auto()
class-attribute
instance-attribute
","text":"Transaction nonce
is not allowed to be max_uint64 - 1 (this is StateTests).
NONCE_OVERFLOW = auto()
class-attribute
instance-attribute
","text":"Transaction nonce
is not allowed to be more than uint64.
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
.
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_exceptions/#ethereum_test_exceptions.TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST","title":"TYPE_4_EMPTY_AUTHORIZATION_LIST = auto()
class-attribute
instance-attribute
","text":"Transaction is type 4, but has an empty authorization list.
"},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.TYPE_4_INVALID_AUTHORITY_SIGNATURE","title":"TYPE_4_INVALID_AUTHORITY_SIGNATURE = auto()
class-attribute
instance-attribute
","text":"Transaction is type 4, but has an empty authorization list.
"},{"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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.
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.
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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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
.
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 insrc/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 insrc/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 insrc/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\n def keccak256(self) -> \"Bytes\":\n \"\"\"\n Return the keccak256 hash of the opcode byte representation.\n \"\"\"\n k = keccak.new(digest_bits=256)\n return Bytes(k.update(bytes(self)).digest())\n
"},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Bytes.__new__","title":"__new__(input)
","text":"Creates a new Bytes object.
Source code insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.Bytes.keccak256","title":"keccak256()
","text":"Return the keccak256 hash of the opcode byte representation.
Source code insrc/ethereum_test_base_types/base_types.py
def keccak256(self) -> \"Bytes\":\n \"\"\"\n Return the keccak256 hash of the opcode byte representation.\n \"\"\"\n k = keccak.new(digest_bits=256)\n return Bytes(k.update(bytes(self)).digest())\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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 TYPE_4_EMPTY_AUTHORIZATION_LIST = auto()\n \"\"\"\n Transaction is type 4, but has an empty authorization list.\n \"\"\"\n TYPE_4_INVALID_AUTHORITY_SIGNATURE = auto()\n \"\"\"\n Transaction is type 4, but has an empty authorization list.\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.
ADDRESS_TOO_LONG = auto()
class-attribute
instance-attribute
","text":"Transaction to
is not allowed to be more than 20 bytes.
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).
NONCE_IS_MAX = auto()
class-attribute
instance-attribute
","text":"Transaction nonce
is not allowed to be max_uint64 - 1 (this is StateTests).
NONCE_OVERFLOW = auto()
class-attribute
instance-attribute
","text":"Transaction nonce
is not allowed to be more than uint64.
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
.
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.TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST","title":"TYPE_4_EMPTY_AUTHORIZATION_LIST = auto()
class-attribute
instance-attribute
","text":"Transaction is type 4, but has an empty authorization list.
"},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.TYPE_4_INVALID_AUTHORITY_SIGNATURE","title":"TYPE_4_INVALID_AUTHORITY_SIGNATURE = auto()
class-attribute
instance-attribute
","text":"Transaction is type 4, but has an empty authorization list.
"},{"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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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
.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.
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
.
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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 behaviordefault_action
bytecode is executed.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 insrc/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 insrc/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 insrc/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 Defaultdefaults
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.
requiredcases
List[ParameterSet]
A list of pytest.param
objects representing different test cases. Its first argument must be a dictionary defining parameter names and values.
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 DescriptionDict[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.
@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 cases
must contain exactly one value, which is a dictionary of parameter values.cases
list, so the original cases
list is modified.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 insrc/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 insrc/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 insrc/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 insrc/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.
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.
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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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
.
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 insrc/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 insrc/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 delegation: Address | Literal[\"Self\"] | 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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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, delegation=None)
","text":"Add a previously unused EOA to the pre-alloc with the balance specified by amount
.
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 delegation: Address | Literal[\"Self\"] | 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 insrc/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 insrc/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 else:\n assert self.v is not None, \"v must be set\"\n assert self.r is not None, \"r must be set\"\n assert self.s is not None, \"s must be set\"\n\n # Calculate the address from the signature\n try:\n signature_bytes = (\n int(self.r).to_bytes(32, byteorder=\"big\")\n + int(self.s).to_bytes(32, byteorder=\"big\")\n + bytes([self.v])\n )\n public_key = PublicKey.from_signature_and_message(\n signature_bytes, keccak256(self.signing_bytes), hasher=None\n )\n self.signer = EOA(\n address=Address(keccak256(public_key.format(compressed=False)[1:])[32 - 20 :])\n )\n except Exception:\n # Signer remains `None` in this case\n pass\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 insrc/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 else:\n assert self.v is not None, \"v must be set\"\n assert self.r is not None, \"r must be set\"\n assert self.s is not None, \"s must be set\"\n\n # Calculate the address from the signature\n try:\n signature_bytes = (\n int(self.r).to_bytes(32, byteorder=\"big\")\n + int(self.s).to_bytes(32, byteorder=\"big\")\n + bytes([self.v])\n )\n public_key = PublicKey.from_signature_and_message(\n signature_bytes, keccak256(self.signing_bytes), hasher=None\n )\n self.signer = EOA(\n address=Address(keccak256(public_key.format(compressed=False)[1:])[32 - 20 :])\n )\n except Exception:\n # Signer remains `None` in this case\n pass\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 insrc/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.
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 insrc/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 insrc/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 insrc/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
.
set_fork_requirements(fork)
","text":"Fills the required fields in an environment depending on the fork.
Source code insrc/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\")
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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
.
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 insrc/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
.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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":"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 insrc/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 insrc/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 insrc/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 insrc/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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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":"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.
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":"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":"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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXP--gas","title":"Gas","text":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHA3--gas","title":"Gas","text":"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":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BALANCE--gas","title":"Gas","text":"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":"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":"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":"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":"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":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATACOPY--gas","title":"Gas","text":"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":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODECOPY--gas","title":"Gas","text":"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":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODESIZE--gas","title":"Gas","text":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODECOPY--gas","title":"Gas","text":"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":"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":"Byzantium
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATACOPY--gas","title":"Gas","text":"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":"Constantinople
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODEHASH--gas","title":"Gas","text":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MLOAD--gas","title":"Gas","text":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE--gas","title":"Gas","text":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE8--gas","title":"Gas","text":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLOAD--gas","title":"Gas","text":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"Cancun
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MCOPY--gas","title":"Gas","text":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG0--gas","title":"Gas","text":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG1--gas","title":"Gas","text":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG2--gas","title":"Gas","text":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG3--gas","title":"Gas","text":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG4--gas","title":"Gas","text":"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":"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":"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":"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":"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":"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":"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":"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.
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":"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":"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":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURN--gas","title":"Gas","text":"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":"Byzantium
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DELEGATECALL--gas","title":"Gas","text":"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":"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":"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.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":"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.Prague
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTDELEGATECALL--gas","title":"Gas","text":"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":"Byzantium
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STATICCALL--gas","title":"Gas","text":"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":"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.Prague
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTSTATICCALL--gas","title":"Gas","text":"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":"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":"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":"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 insrc/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 insrc/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 insrc/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 insrc/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.
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 insrc/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.
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 insrc/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 insrc/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 insrc/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 insrc/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.
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 insrc/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 insrc/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
.
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.
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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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
@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.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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 delegation: Address | Literal[\"Self\"] | 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 or delegation is not None:\n if storage is None and delegation 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 if not isinstance(delegation, Address) and delegation == \"Self\":\n delegation = eoa\n account = Account(\n nonce=1,\n balance=amount,\n storage=storage if storage is not None else {},\n code=DELEGATION_DESIGNATION + bytes(delegation) # type: ignore\n if delegation is not None\n else b\"\",\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 insrc/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 insrc/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 insrc/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!
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, delegation=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 insrc/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 delegation: Address | Literal[\"Self\"] | 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 or delegation is not None:\n if storage is None and delegation 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 if not isinstance(delegation, Address) and delegation == \"Self\":\n delegation = eoa\n account = Account(\n nonce=1,\n balance=amount,\n storage=storage if storage is not None else {},\n code=DELEGATION_DESIGNATION + bytes(delegation) # type: ignore\n if delegation is not None\n else b\"\",\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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 Defaultmetafunc
Metafunc
Pytest's metafunc object.
requiredvalidity_marker_name
str
Name of the validity marker to validate and return.
requiredtest_name
str
The name of the test being parametrized by pytest_generate_tests
.
Returns:
Type DescriptionSet[Fork]
The name of the fork specified to the validity marker.
Source code insrc/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 insrc/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 insrc/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 insrc/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 insrc/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":"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 insrc/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 DescriptionException
If the module path contains \"eip\" and the module does not define a reference spec.
Returns:
Name Type Descriptionspec_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 insrc/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
.
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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.
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 intests/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.
test_modexp(state_test, input, output, pre)
","text":"Test the MODEXP precompile
Source code intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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.
TestTransientStorageInContractCreation
","text":"Test transient storage in contract creation contexts:
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 intests/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.
test_subcall(state_test, env, pre, tx, post)
","text":"Test transient storage with a subcall using the following opcodes:
CALL
CALLCODE
DELEGATECALL
STATICCALL
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.
test_reentrant_call(state_test, pre, bytecode, expected_storage)
","text":"Test transient storage in different reentrancy contexts.
Source code intests/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.
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 intests/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 intests/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 intests/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 intests/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 testAdd a function that is named test_<test_name>
and takes at least the following arguments:
All other pytest.fixtures
can be parametrized to generate new combinations and test cases.
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.
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.
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 intests/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.
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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 caseinput
: object containing commitment
, proof
, z
and y
output
: expected output of the evaluation, true, false or null.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:
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
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
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.
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 intests/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 intests/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 testAdd a function that is named test_<test_name>
and takes at least the following arguments:
All other pytest.fixture
fixtures can be parametrized to generate new combinations and test cases.
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.
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:
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:
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:
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.
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:
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:
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:
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:
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:
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 transactionblob count > MAX_BLOBS_PER_BLOCK
in type 3 transactiontests/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:
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:
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 intests/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:
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 intests/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:
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:
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 intests/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 intests/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.
Add a function that is named test_<test_name>
and takes at least the following arguments:
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.
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]
.
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.
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 intests/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.
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.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.
Add a function that is named test_<test_name>
and takes at least the following arguments:
The following arguments need to be parametrized or the test will not be generated:
All other pytest.fixture
fixtures can be parametrized to generate new combinations and test cases.
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:
[0, MAX_BLOBS_PER_BLOCK]
blobs[0, TARGET_BLOBS_PER_BLOCK]
equivalent value of excess blob gastests/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:
> 2^32
> 2^32
> 2^64
> 2^64
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 intests/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.
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 blockblobGasUsed
is the max uint64 valuetests/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
TARGET_BLOB_GAS_PER_BLOCK
in a single block with zero blobsTARGET_BLOB_GAS_PER_BLOCK
in a single block with max blobstests/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
.
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.
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.
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.
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.
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`:
TARGET_BLOBS_PER_BLOCK + 1
blobs, but excessBlobGas
is off by \u00b11TARGET_BLOBS_PER_BLOCK - 1
blobs, but excessBlobGas
is off by \u00b11tests/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.
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.
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.
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.
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 testAdd a function that is named test_<test_name>
and takes at least the following arguments:
The following arguments need to be parametrized or the test will not be generated:
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.
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.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:
z
and y
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.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:
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.
gas_limit
with exact necessary gas, insufficient gas and extra gas.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 intests/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 intests/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:
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 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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 usingtests/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 usingtests/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 usingtests/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 usingtests/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 usingtests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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
.
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.
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 intests/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 intests/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 intests/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:
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:
Start with contract 0xaa
which has initial balance of 3 wei. 0xaa
contract code simply performs a self-destruct to itself.
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.
Store the balance of 0xaa
after the first transaction is processed. 0xaa
self-destructed. Expected outcome: 0 wei.
Send another transaction (tx 2) to call 0xaa with 5 wei.
Store the balance of 0xaa
after the second transaction is processed. No self-destruct. Expected outcome: 5 wei.
Verify that:
0xaa
self-destructed.0xaa
after each tx are correct.0xaa
does not execute, hence self-destruct mechanism does not trigger.TODO: EOF - This test could be parametrized for EOFCREATE
Source code intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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.
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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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":"tests/prague/eip7692_eof_v1/eip3540_eof_v1test_example_valid_invalid.py::test_example_valid_invalid
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k empty_container
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k single_code_section_no_data_section
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_valid_containers -k single_code_section_with_data_section
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k data_section_contents_incomplete
, tests/prague/eip7692_eof_v1/eip3540_eof_v1test_migrated_valid_invalid.py::test_migrated_valid_invalid -k data_section_contents_incomplete
)tests/prague/eip7692_eof_v1/eip3540_eof_v1test_container_validation.py::test_invalid_containers -k no_data_section_contents
, tests/prague/eip7692_eof_v1/eip3540_eof_v1test_migrated_valid_invalid.py::test_migrated_valid_invalid -k no_data_section_contents
)tests/prague/eip7692_eof_v1/tests/prague/eip7692_eof_v1/eip3540_eof_v1test_container_validation.py::test_valid_containers -k multiple_code_sections
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_max_code_sections
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k too_many_code_sections
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k incomplete_magic
)tests/prague/eip7692_eof_v1/eip3540_eof_v1test_container_validation.py::test_magic_validation
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k no_version
)tests/prague/eip7692_eof_v1/eip3540_eof_v1test_container_validation.py::test_version_validation
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k no_type_header
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k no_type_section_size
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k incomplete_type_section_size
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py::test_section_order -k test_position_CasePosition.HEADER-section_test_SectionTest.MISSING-section_kind_TYPE
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k no_code_header
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k code_section_count_missing
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k code_section_count_incomplete
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k code_section_size_missing
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k code_section_size_incomplete
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py::test_section_order -k test_position_CasePosition.HEADER-section_test_SectionTest.MISSING-section_kind_CODE
) tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k zero_code_sections_header
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k empty_code_section
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k empty_code_section_with_non_empty_data
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k truncated_header_data_section
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k truncated_header_data_section_with_container_section
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k no_data_section_size
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k data_section_size_incomplete
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k terminator_incomplete
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k truncated_before_type_section
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k truncated_type_section_before_outputs
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k truncated_type_section_before_max_stack_height
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k truncated_type_section_truncated_max_stack_height
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k no_code_section_contents
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k incomplete_code_section_contents
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k no_data_section_contents
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k trailing_bytes_after_data_section
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py::test_section_order -k test_position_CasePosition.HEADER-section_test_SectionTest.MISSING-section_kind_DATA
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k multiple_data_sections
, tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k multiple_code_and_data_sections
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k unknown_section_1
, tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k unknown_section_2
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k type_section_too
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_valid_containers -k single_code_section_max_stack_size
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k single_code_section_max_stack_size_too_large
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k code_section_with_inputs_outputs
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k code_section_input_maximum
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k code_section_output_maximum
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k code_section_input_too_large
, tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k code_section_output_too_large
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k invalid_first_code_section
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k too_many_type_sections
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k multiple_code_headers
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k multiple_data_sections
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py::test_section_order -k 'SectionTest.MISSING-section_kind_TYPE'
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py::test_section_order -k 'SectionTest.MISSING-section_kind_CODE'
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py::test_section_order -k 'SectionTest.MISSING-section_kind_DATA'
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_valid_containers[fork_CancunEIP7692-eof_test-single_subcontainer_without_data]
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_valid_containers[fork_CancunEIP7692-eof_test-single_subcontainer_with_data]
)tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py::test_wide_container[fork_CancunEIP7692-eof_test-256]
)tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py::test_wide_container[fork_CancunEIP7692-eof_test-257]
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k no_container_section_count
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k incomplete_container_section_count
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k no_container_section_size
, tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k incomplete_container_section_size
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k zero_container_section_count
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k zero_size_container_section
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k no_container_section_contents
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k multiple_container_headers
)tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py -k invalid
)tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py::test_deep_container
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_valid_containers[fork_CancunEIP7692-eof_test-code_section_input_maximum]
, tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_valid_containers[fork_CancunEIP7692-eof_test-code_section_output_maximum]
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k code_section_input_too_large
, tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k code_section_output_too_large
)*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)RJUMPI and RJUMPV with the same target
RJUMP* to self (ethereum/tests: src/EOFTestsFiller/efStack/self_referencing_jumps_Copier.json)
tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py -k test_returncontract_valid_index
)tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py::test_returncontract_invalid_truncated_immediate
)tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py -k test_returncontract_invalid_index
)tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py::test_returncontract_terminating
)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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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_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 intests/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 intests/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 intests/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_valid_containers","title":"test_valid_containers(eof_test, container)
","text":"Test creating various types of valid EOF V1 contracts using legacy initcode and a contract creating transaction.
Source code intests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py
@pytest.mark.parametrize(\n \"container\",\n [\n Container(\n name=\"single_code_section_with_data_section\",\n sections=[\n Section.Code(code=Op.STOP),\n Section.Data(data=\"0x00\"),\n ],\n ),\n Container(\n name=\"single_code_section_max_stack_size\",\n sections=[\n Section.Code(\n code=(Op.CALLER * MAX_OPERAND_STACK_HEIGHT)\n + (Op.POP * MAX_OPERAND_STACK_HEIGHT)\n + Op.STOP,\n max_stack_height=MAX_OPERAND_STACK_HEIGHT,\n ),\n ],\n ),\n Container(\n name=\"code_section_with_inputs_outputs\",\n sections=[\n Section.Code(\n code=(Op.PUSH0 + Op.CALLF[1] + Op.STOP),\n ),\n Section.Code(\n code=Op.POP + Op.PUSH0 + Op.RETF,\n code_inputs=1,\n code_outputs=1,\n ),\n ],\n ),\n Container(\n name=\"code_section_input_maximum\",\n sections=[\n Section.Code(\n code=((Op.PUSH0 * MAX_CODE_INPUTS) + Op.CALLF[1] + Op.STOP),\n max_stack_height=MAX_CODE_INPUTS,\n ),\n Section.Code(\n code=(Op.POP * MAX_CODE_INPUTS) + Op.RETF,\n code_inputs=MAX_CODE_INPUTS,\n code_outputs=0,\n max_stack_height=MAX_CODE_INPUTS,\n ),\n ],\n ),\n Container(\n name=\"code_section_output_maximum\",\n sections=[\n Section.Code(\n code=(Op.CALLF[1] + Op.STOP),\n max_stack_height=MAX_CODE_OUTPUTS,\n ),\n Section.Code(\n code=(Op.PUSH0 * MAX_CODE_OUTPUTS) + Op.RETF,\n code_inputs=0,\n code_outputs=MAX_CODE_OUTPUTS,\n max_stack_height=MAX_CODE_OUTPUTS,\n ),\n ],\n ),\n Container(\n name=\"multiple_code_sections\",\n sections=[\n Section.Code(\n Op.CALLF[1] + Op.STOP,\n ),\n Section.Code(\n code=Op.RETF,\n code_inputs=0,\n code_outputs=0,\n ),\n ],\n ),\n Container(\n name=\"multiple_code_sections_max_inputs_max_outputs\",\n sections=[\n Section.Code(\n (Op.PUSH0 * MAX_CODE_OUTPUTS) + Op.CALLF[1] + Op.STOP,\n max_stack_height=MAX_CODE_OUTPUTS,\n ),\n Section.Code(\n code=Op.RETF,\n code_inputs=MAX_CODE_INPUTS,\n code_outputs=MAX_CODE_OUTPUTS,\n max_stack_height=MAX_CODE_INPUTS,\n ),\n ],\n ),\n Container(\n name=\"single_subcontainer_without_data\",\n sections=[\n Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP),\n Section.Container(Container.Code(Op.INVALID)),\n ],\n ),\n Container(\n name=\"single_subcontainer_with_data\",\n sections=[\n Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP),\n Section.Container(Container.Code(Op.INVALID)),\n Section.Data(data=\"0xAA\"),\n ],\n ),\n ],\n ids=lambda c: c.name,\n)\ndef test_valid_containers(\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_container_validation/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_container_validation.test_invalid_containers","title":"test_invalid_containers(eof_test, container)
","text":"Test creating various types of valid EOF V1 contracts using legacy initcode and a contract creating transaction.
Source code intests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py
@pytest.mark.parametrize(\n \"container\",\n [\n Container(\n name=\"empty_container\",\n raw_bytes=b\"\",\n validity_error=[\n EOFException.INVALID_MAGIC,\n ],\n ),\n Container(\n name=\"single_code_section_no_data_section\",\n sections=[\n Section.Code(Op.STOP),\n ],\n auto_data_section=False,\n validity_error=[\n EOFException.MISSING_DATA_SECTION,\n EOFException.UNEXPECTED_HEADER_KIND,\n ],\n ),\n Container(\n name=\"incomplete_magic\",\n raw_bytes=bytes([0xEF]),\n validity_error=EOFException.INVALID_MAGIC,\n ),\n Container(\n name=\"no_version\",\n raw_bytes=bytes([0xEF, 0x00]),\n validity_error=[EOFException.INVALID_VERSION, EOFException.INVALID_MAGIC],\n ),\n Container(\n name=\"no_type_header\",\n raw_bytes=bytes([0xEF, 0x00, 0x01]),\n # TODO the exception must be about missing section types\n validity_error=EOFException.MISSING_HEADERS_TERMINATOR,\n ),\n Container(\n name=\"no_type_section_size\",\n raw_bytes=bytes(\n [0xEF, 0x00, 0x01, 0x01],\n ),\n # TODO the exception must be about incomplete section in the header\n validity_error=[\n EOFException.MISSING_HEADERS_TERMINATOR,\n EOFException.INVALID_TYPE_SECTION_SIZE,\n ],\n ),\n Container(\n name=\"incomplete_type_section_size\",\n raw_bytes=bytes(\n [0xEF, 0x00, 0x01, 0x01, 0x00],\n ),\n # TODO the exception must be about incomplete section in the header\n validity_error=[\n EOFException.INCOMPLETE_SECTION_SIZE,\n EOFException.INVALID_TYPE_SECTION_SIZE,\n ],\n ),\n Container(\n name=\"no_code_header\",\n raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04]),\n validity_error=[\n EOFException.MISSING_CODE_HEADER,\n EOFException.MISSING_HEADERS_TERMINATOR,\n ],\n ),\n Container(\n name=\"no_code_header_2\",\n raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0xFE]),\n validity_error=[EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"no_code_header_3\",\n raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x00]),\n validity_error=[EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"code_section_count_missing\",\n raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02]),\n validity_error=EOFException.INCOMPLETE_SECTION_NUMBER,\n ),\n Container(\n name=\"code_section_count_incomplete\",\n raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0x00]),\n validity_error=EOFException.INCOMPLETE_SECTION_NUMBER,\n ),\n Container(\n name=\"code_section_size_missing\",\n raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0x00, 0x01]),\n validity_error=[\n EOFException.MISSING_HEADERS_TERMINATOR,\n EOFException.ZERO_SECTION_SIZE,\n ],\n ),\n Container(\n name=\"code_section_size_incomplete\",\n raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0x00, 0x01, 0x00]),\n validity_error=[EOFException.INCOMPLETE_SECTION_SIZE, EOFException.ZERO_SECTION_SIZE],\n ),\n Container(\n name=\"code_section_count_0x8000_truncated\",\n raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0x80, 0x00]),\n validity_error=EOFException.TOO_MANY_CODE_SECTIONS,\n ),\n Container(\n name=\"code_section_count_0xFFFF_truncated\",\n raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0xFF, 0xFF]),\n validity_error=EOFException.TOO_MANY_CODE_SECTIONS,\n ),\n Container(\n name=\"code_section_count_0x8000\",\n raw_bytes=bytes(\n [0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0x80, 0x00] + [0x00, 0x01] * 0x8000\n ),\n validity_error=EOFException.CONTAINER_SIZE_ABOVE_LIMIT,\n ),\n Container(\n name=\"code_section_count_0xFFFF\",\n raw_bytes=bytes(\n [0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0xFF, 0xFF] + [0x00, 0x01] * 0xFFFF\n ),\n validity_error=EOFException.CONTAINER_SIZE_ABOVE_LIMIT,\n ),\n Container(\n name=\"code_section_size_0x8000_truncated\",\n raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0x00, 0x01, 0x80, 0x00]),\n validity_error=EOFException.MISSING_HEADERS_TERMINATOR,\n ),\n Container(\n name=\"code_section_size_0xFFFF_truncated\",\n raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0x00, 0x01, 0xFF, 0xFF]),\n validity_error=EOFException.MISSING_HEADERS_TERMINATOR,\n ),\n Container(\n name=\"terminator_incomplete\",\n header_terminator=b\"\",\n sections=[\n Section(kind=SectionKind.TYPE, data=b\"\", custom_size=4),\n Section.Code(code=b\"\", custom_size=0x01),\n ],\n expected_bytecode=\"ef00 01 01 0004 02 0001 0001 04 0000\",\n validity_error=EOFException.MISSING_HEADERS_TERMINATOR,\n ),\n Container(\n name=\"truncated_header_data_section\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001\",\n validity_error=EOFException.MISSING_HEADERS_TERMINATOR,\n ),\n Container(\n name=\"no_data_section_size\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 04\",\n validity_error=EOFException.MISSING_HEADERS_TERMINATOR,\n ),\n Container(\n name=\"data_section_size_incomplete\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 04 00\",\n validity_error=EOFException.INCOMPLETE_SECTION_SIZE,\n ),\n Container(\n name=\"no_container_section_count\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 03\",\n validity_error=EOFException.INCOMPLETE_SECTION_NUMBER,\n ),\n Container(\n name=\"incomplete_container_section_count\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 03 00\",\n validity_error=EOFException.INCOMPLETE_SECTION_NUMBER,\n ),\n Container(\n name=\"zero_container_section_count\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 03 0000 04 0000 00 00800000 00\",\n validity_error=EOFException.ZERO_SECTION_SIZE,\n ),\n Container(\n name=\"no_container_section_size\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 03 0001\",\n validity_error=EOFException.MISSING_HEADERS_TERMINATOR,\n ),\n Container(\n name=\"incomplete_container_section_size\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 03 0001 00\",\n validity_error=EOFException.INCOMPLETE_SECTION_SIZE,\n ),\n Container(\n name=\"incomplete_container_section_size_2\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 03 0002 0001\",\n validity_error=EOFException.INCOMPLETE_SECTION_SIZE,\n ),\n Container(\n name=\"incomplete_container_section_size_3\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 03 0002 0001 00\",\n validity_error=EOFException.INCOMPLETE_SECTION_SIZE,\n ),\n Container(\n name=\"zero_size_container_section\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 03 0001 0000 04 0000 00 00800000 00\",\n validity_error=EOFException.ZERO_SECTION_SIZE,\n ),\n Container(\n name=\"truncated_header_data_section_with_container_section\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 03 0001 0001\",\n validity_error=EOFException.MISSING_HEADERS_TERMINATOR,\n ),\n Container(\n name=\"no_data_section_size_with_container_section\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 03 0001 0001 04\",\n validity_error=EOFException.MISSING_HEADERS_TERMINATOR,\n ),\n Container(\n name=\"data_section_size_incomplete_with_container_section\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 03 0001 0001 04 00\",\n validity_error=EOFException.INCOMPLETE_SECTION_SIZE,\n ),\n Container(\n name=\"no_sections\",\n sections=[],\n auto_data_section=False,\n auto_type_section=AutoSection.NONE,\n expected_bytecode=\"ef0001 00\",\n validity_error=[EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"no_code_section_header\",\n sections=[\n Section(kind=SectionKind.TYPE, data=b\"\\0\\x80\\0\\0\"),\n Section.Data(\"0x00\"),\n ],\n expected_bytecode=\"ef00 01 01 0004 04 0001 00 00800000 00\",\n auto_type_section=AutoSection.NONE,\n validity_error=[EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"too_many_code_sections\",\n sections=[\n Section.Code(Op.JUMPF[i + 1] if i < MAX_CODE_SECTIONS else Op.STOP)\n for i in range(MAX_CODE_SECTIONS + 1)\n ],\n validity_error=EOFException.TOO_MANY_CODE_SECTIONS,\n ),\n Container(\n name=\"zero_code_sections_header\",\n raw_bytes=\"ef00 01 01 0004 02 0000 04 0000 00 00800000\",\n validity_error=[\n EOFException.ZERO_SECTION_SIZE,\n EOFException.INCOMPLETE_SECTION_NUMBER,\n ],\n ),\n Container(\n name=\"zero_code_sections_header_empty_type_section\",\n raw_bytes=\"ef00 01 01 0000 02 0000 04 0000 00\",\n validity_error=[\n EOFException.ZERO_SECTION_SIZE,\n EOFException.INCOMPLETE_SECTION_NUMBER,\n ],\n ),\n # The basic `no_section_terminator` cases just remove the terminator\n # and the `00` for zeroth section inputs looks like one. Error is because\n # the sections are wrongly sized.\n Container(\n name=\"no_section_terminator\",\n header_terminator=bytes(),\n sections=[Section.Code(code=Op.STOP)],\n validity_error=[\n EOFException.INVALID_SECTION_BODIES_SIZE,\n EOFException.INVALID_FIRST_SECTION_TYPE,\n ],\n ),\n Container(\n name=\"no_section_terminator_1\",\n header_terminator=bytes(),\n sections=[Section.Code(code=Op.STOP, custom_size=2)],\n validity_error=[\n EOFException.INVALID_SECTION_BODIES_SIZE,\n EOFException.INVALID_FIRST_SECTION_TYPE,\n ],\n ),\n Container(\n name=\"no_section_terminator_2\",\n header_terminator=bytes(),\n sections=[Section.Code(code=\"0x\", custom_size=3)],\n validity_error=EOFException.INVALID_SECTION_BODIES_SIZE,\n ),\n Container(\n name=\"no_section_terminator_3\",\n header_terminator=bytes(),\n sections=[Section.Code(code=Op.PUSH1(0) + Op.STOP)],\n validity_error=[\n EOFException.INVALID_SECTION_BODIES_SIZE,\n EOFException.INVALID_FIRST_SECTION_TYPE,\n ],\n ),\n # The following cases just remove the terminator\n # and the `00` for zeroth section inputs looks like one. Section bodies\n # are as the size prescribes here, so the error is about the inputs of zeroth section.\n Container(\n name=\"no_section_terminator_section_bodies_ok_1\",\n header_terminator=bytes(),\n sections=[Section.Code(code=Op.JUMPDEST + Op.STOP, custom_size=1)],\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n Container(\n name=\"no_section_terminator_section_bodies_ok_2\",\n header_terminator=bytes(),\n sections=[Section.Code(code=Op.JUMPDEST * 2 + Op.STOP, custom_size=2)],\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n # Here the terminator is missing but made to look like a different section\n # or arbitrary byte\n Container(\n name=\"no_section_terminator_nonzero\",\n header_terminator=b\"01\",\n sections=[Section.Code(code=Op.STOP)],\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"no_section_terminator_nonzero_1\",\n header_terminator=b\"02\",\n sections=[Section.Code(code=Op.STOP, custom_size=2)],\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"no_section_terminator_nonzero_2\",\n header_terminator=b\"03\",\n sections=[Section.Code(code=\"0x\", custom_size=3)],\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"no_section_terminator_nonzero_3\",\n header_terminator=b\"04\",\n sections=[Section.Code(code=Op.PUSH1(0) + Op.STOP)],\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"no_section_terminator_nonzero_4\",\n header_terminator=b\"fe\",\n sections=[Section.Code(code=Op.PUSH1(0) + Op.STOP)],\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"truncated_before_type_section\",\n sections=[\n Section(kind=SectionKind.TYPE, data=b\"\", custom_size=4),\n Section.Code(code=b\"\", custom_size=0x01),\n ],\n expected_bytecode=\"ef00 01 01 0004 02 0001 0001 04 0000 00\",\n validity_error=EOFException.INVALID_SECTION_BODIES_SIZE,\n ),\n Container(\n name=\"truncated_type_section_before_outputs\",\n sections=[\n Section(kind=SectionKind.TYPE, data=b\"\\0\", custom_size=4),\n Section.Code(code=b\"\", custom_size=0x01),\n ],\n expected_bytecode=\"ef00 01 01 0004 02 0001 0001 04 0000 00 00\",\n validity_error=EOFException.INVALID_SECTION_BODIES_SIZE,\n ),\n Container(\n name=\"truncated_type_section_before_max_stack_height\",\n sections=[\n Section(kind=SectionKind.TYPE, data=b\"\\0\\x80\", custom_size=4),\n Section.Code(code=b\"\", custom_size=0x01),\n ],\n expected_bytecode=\"ef00 01 01 0004 02 0001 0001 04 0000 00 0080\",\n validity_error=EOFException.INVALID_SECTION_BODIES_SIZE,\n ),\n Container(\n name=\"truncated_type_section_truncated_max_stack_height\",\n sections=[\n Section(kind=SectionKind.TYPE, data=b\"\\0\\x80\\0\", custom_size=4),\n Section.Code(code=b\"\", custom_size=0x01),\n ],\n expected_bytecode=\"ef00 01 01 0004 02 0001 0001 04 0000 00 008000\",\n validity_error=EOFException.INVALID_SECTION_BODIES_SIZE,\n ),\n Container(\n name=\"no_code_section_contents\",\n sections=[Section.Code(code=\"0x\", custom_size=0x01)],\n validity_error=EOFException.INVALID_SECTION_BODIES_SIZE,\n ),\n Container(\n name=\"incomplete_code_section_contents\",\n sections=[\n Section.Code(code=Op.STOP, custom_size=0x02),\n ],\n validity_error=EOFException.INVALID_SECTION_BODIES_SIZE,\n ),\n Container(\n name=\"trailing_bytes_after_code_section\",\n sections=[Section.Code(code=Op.PUSH1(0) + Op.STOP)],\n extra=bytes([0xDE, 0xAD, 0xBE, 0xEF]),\n validity_error=EOFException.INVALID_SECTION_BODIES_SIZE,\n ),\n Container(\n name=\"empty_code_section\",\n sections=[Section.Code(code=\"0x\")],\n # TODO the exception must be about code section EOFException.INVALID_CODE_SECTION,\n validity_error=EOFException.ZERO_SECTION_SIZE,\n ),\n Container(\n name=\"empty_code_section_with_non_empty_data\",\n sections=[\n Section.Code(code=\"0x\"),\n Section.Data(data=\"0xDEADBEEF\"),\n ],\n # TODO the exception must be about code section EOFException.INVALID_CODE_SECTION,\n validity_error=EOFException.ZERO_SECTION_SIZE,\n ),\n Container(\n name=\"no_container_section_contents\",\n sections=[\n Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP),\n Section(kind=SectionKind.CONTAINER, data=b\"\", custom_size=20),\n ],\n validity_error=EOFException.INVALID_SECTION_BODIES_SIZE,\n ),\n Container(\n name=\"no_container_section_contents_with_data\",\n sections=[\n Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP),\n Section(kind=SectionKind.CONTAINER, data=b\"\", custom_size=20),\n Section.Data(b\"\\0\" * 20),\n ],\n validity_error=EOFException.TOPLEVEL_CONTAINER_TRUNCATED,\n ),\n Container(\n name=\"no_data_section_contents\",\n sections=[\n Section.Code(Op.STOP),\n Section.Data(data=\"0x\", custom_size=1),\n ],\n code=\"ef0001 010004 0200010001 040001 00 00800000 00\",\n validity_error=EOFException.TOPLEVEL_CONTAINER_TRUNCATED,\n ),\n Container(\n name=\"data_section_contents_incomplete\",\n sections=[\n Section.Code(Op.STOP),\n Section.Data(data=\"0xAABBCC\", custom_size=4),\n ],\n validity_error=EOFException.TOPLEVEL_CONTAINER_TRUNCATED,\n ),\n Container(\n name=\"data_section_preceding_code_section\",\n auto_data_section=False,\n auto_sort_sections=AutoSection.NONE,\n sections=[\n Section.Data(data=\"0xDEADBEEF\"),\n Section.Code(Op.STOP),\n ],\n validity_error=[EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"data_section_without_code_section\",\n sections=[Section.Data(data=\"0xDEADBEEF\")],\n # TODO the actual exception should be EOFException.MISSING_CODE_HEADER\n validity_error=[EOFException.ZERO_SECTION_SIZE, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"no_section_terminator_3a\",\n header_terminator=bytes(),\n sections=[Section.Code(code=\"0x030004\")],\n # TODO the exception must be about terminator\n validity_error=[\n EOFException.INVALID_SECTION_BODIES_SIZE,\n EOFException.INVALID_FIRST_SECTION_TYPE,\n ],\n ),\n Container(\n name=\"no_section_terminator_4a\",\n header_terminator=bytes(),\n sections=[\n Section.Code(Op.STOP),\n Section.Data(data=\"0xAABBCCDD\"),\n ],\n # TODO: The error of this validation can be random.\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n Container(\n name=\"trailing_bytes_after_data_section\",\n extra=bytes([0xEE]),\n sections=[\n Section.Code(code=Op.PUSH1(0) + Op.STOP),\n Section.Data(data=\"0xAABBCCDD\"),\n ],\n # TODO should be more specific exception about trailing bytes\n validity_error=EOFException.INVALID_SECTION_BODIES_SIZE,\n ),\n Container(\n name=\"multiple_data_sections\",\n sections=[\n Section.Code(code=Op.PUSH1(0) + Op.STOP),\n Section.Data(data=\"0xAABBCC\"),\n Section.Data(data=\"0xAABBCC\"),\n ],\n expected_bytecode=(\n \"ef00 01 01 0004 02 0001 0003 04 0003 04 0003 00 00800001 600000 AABBCC AABBCC\"\n ),\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"multiple_code_headers\",\n sections=[\n Section.Code(Op.JUMPF[1]),\n Section.Data(data=\"0xAA\"),\n Section.Code(Op.STOP),\n ],\n auto_sort_sections=AutoSection.ONLY_BODY,\n expected_bytecode=(\n \"ef00 01 01 0008 02 0001 0003 04 0001 02 0001 0001 00\"\n \"00800000 00800000 E50001 00 AA\"\n ),\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"multiple_code_headers_2\",\n sections=[\n Section.Code(Op.JUMPF[1]),\n Section.Code(Op.STOP),\n Section.Data(data=\"0xAA\"),\n ],\n skip_join_concurrent_sections_in_header=True,\n expected_bytecode=(\n \"ef00 01 01 0008 02 0001 0003 02 0001 0001 04 0001 00\"\n \"00800000 00800000 E50001 00 AA\"\n ),\n validity_error=[\n EOFException.MISSING_DATA_SECTION,\n EOFException.UNEXPECTED_HEADER_KIND,\n ],\n ),\n Container(\n name=\"duplicated_code_header\",\n sections=[\n Section.Code(Op.STOP),\n Section.Code(\n b\"\",\n custom_size=1,\n skip_types_header_listing=True,\n skip_types_body_listing=True,\n ),\n Section.Data(data=\"0xAA\"),\n ],\n skip_join_concurrent_sections_in_header=True,\n expected_bytecode=(\n \"ef00 01 01 0004 02 0001 0001 02 0001 0001 04 0001 00 00800000 00 AA\"\n ),\n validity_error=[\n EOFException.MISSING_DATA_SECTION,\n EOFException.UNEXPECTED_HEADER_KIND,\n ],\n ),\n Container(\n name=\"multiple_code_and_data_sections\",\n sections=[\n Section.Code(Op.JUMPF[1]),\n Section.Code(Op.STOP),\n Section.Data(data=\"0xAA\"),\n Section.Data(data=\"0xAA\"),\n ],\n expected_bytecode=(\n \"ef00 01 01 0008 02 0002 0003 0001 04 0001 04 0001 00\"\n \"00800000 00800000 E50001 00 AA AA\"\n ),\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"multiple_code_and_data_sections_2\",\n sections=[\n Section.Code(Op.JUMPF[1]),\n Section.Code(Op.STOP),\n Section.Data(data=\"0xAA\"),\n Section.Data(data=\"0xAA\"),\n ],\n skip_join_concurrent_sections_in_header=True,\n expected_bytecode=(\n \"ef00 01 01 0008 02 0001 0003 02 0001 0001 04 0001 04 0001 00\"\n \"00800000 00800000 E50001 00 AA AA\"\n ),\n validity_error=[\n EOFException.MISSING_DATA_SECTION,\n EOFException.UNEXPECTED_HEADER_KIND,\n ],\n ),\n Container(\n name=\"multiple_container_headers\",\n sections=[\n Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.EOFCREATE[1](0, 0, 0, 0) + Op.STOP),\n Section.Container(Container.Code(code=Op.INVALID)),\n Section.Data(data=\"0xAA\"),\n Section.Container(Container.Code(code=Op.INVALID)),\n ],\n auto_sort_sections=AutoSection.ONLY_BODY,\n expected_bytecode=(\n \"ef00 01 01 0004 02 0001 0015 03 0001 0014 04 0001 03 0001 0014 00\"\n \"00800005 6000600060006000ec00 6000600060006000ec01 00\"\n \"ef00 01 01 0004 02 0001 0001 04 0000 00 00800000 fe\"\n \"ef00 01 01 0004 02 0001 0001 04 0000 00 00800000 fe\"\n \"aa\"\n ),\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"multiple_container_headers_2\",\n sections=[\n Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.EOFCREATE[1](0, 0, 0, 0) + Op.STOP),\n Section.Container(Container.Code(code=Op.INVALID)),\n Section.Container(Container.Code(code=Op.INVALID)),\n Section.Data(data=\"0xAA\"),\n ],\n skip_join_concurrent_sections_in_header=True,\n expected_bytecode=(\n \"ef00 01 01 0004 02 0001 0015 03 0001 0014 03 0001 0014 04 0001 00\"\n \"00800005 6000600060006000ec00 6000600060006000ec01 00\"\n \"ef00 01 01 0004 02 0001 0001 04 0000 00 00800000 fe\"\n \"ef00 01 01 0004 02 0001 0001 04 0000 00 00800000 fe\"\n \"aa\"\n ),\n validity_error=[\n EOFException.MISSING_DATA_SECTION,\n EOFException.UNEXPECTED_HEADER_KIND,\n ],\n ),\n Container(\n name=\"duplicated_container_header\",\n sections=[\n Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP),\n Section.Container(Container.Code(code=Op.INVALID)),\n Section(kind=SectionKind.CONTAINER, data=b\"\", custom_size=20),\n Section.Data(data=\"0xAA\"),\n ],\n skip_join_concurrent_sections_in_header=True,\n expected_bytecode=(\n \"ef00 01 01 0004 02 0001 000b 03 0001 0014 03 0001 0014 04 0001 00\"\n \"00800004 6000600060006000ec00 00\"\n \"ef00 01 01 0004 02 0001 0001 04 0000 00 00800000 fe\"\n \"aa\"\n ),\n validity_error=[\n EOFException.MISSING_DATA_SECTION,\n EOFException.UNEXPECTED_HEADER_KIND,\n ],\n ),\n Container(\n name=\"unknown_section_1\",\n sections=[\n Section.Code(Op.STOP),\n Section.Data(data=\"0x\"),\n Section(kind=VERSION_MAX_SECTION_KIND + 1, data=\"0x01\"),\n ],\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"unknown_section_2\",\n sections=[\n Section(kind=VERSION_MAX_SECTION_KIND + 1, data=\"0x01\"),\n Section.Data(data=\"0x\"),\n Section.Code(Op.STOP),\n ],\n # TODO the exception should be about unknown section definition\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"unknown_section_empty\",\n sections=[\n Section.Code(Op.STOP),\n Section.Data(data=\"0x\"),\n Section(kind=VERSION_MAX_SECTION_KIND + 1, data=\"0x\"),\n ],\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"no_type_section\",\n sections=[\n Section.Code(code=Op.STOP),\n Section.Data(\"0x00\"),\n ],\n auto_type_section=AutoSection.NONE,\n validity_error=[EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"too_many_type_sections\",\n sections=[\n Section(kind=SectionKind.TYPE, data=\"0x00000000\"),\n Section(kind=SectionKind.TYPE, data=\"0x00000000\"),\n Section.Code(Op.STOP),\n ],\n auto_type_section=AutoSection.NONE,\n validity_error=[EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"too_many_type_sections_2\",\n sections=[\n Section(kind=SectionKind.TYPE, data=\"0x00800000\"),\n Section(kind=SectionKind.TYPE, data=\"0x00800000\"),\n Section.Code(Op.STOP),\n ],\n auto_type_section=AutoSection.NONE,\n validity_error=[EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"empty_type_section\",\n sections=[\n Section(kind=SectionKind.TYPE, data=\"0x\"),\n Section.Code(Op.STOP),\n ],\n expected_bytecode=\"ef00 01 01 0000 02 0001 0001 04 0000 00 00\",\n validity_error=[\n EOFException.ZERO_SECTION_SIZE,\n EOFException.INVALID_SECTION_BODIES_SIZE,\n ],\n ),\n Container(\n name=\"type_section_too_small_single_code_section_1\",\n sections=[\n Section(kind=SectionKind.TYPE, data=\"0x00\"),\n Section.Code(Op.STOP),\n ],\n auto_type_section=AutoSection.NONE,\n validity_error=EOFException.INVALID_TYPE_SECTION_SIZE,\n ),\n Container(\n name=\"type_section_too_small_single_code_section_2\",\n sections=[\n Section(kind=SectionKind.TYPE, data=\"0x008000\"),\n Section.Code(Op.STOP),\n ],\n auto_type_section=AutoSection.NONE,\n validity_error=EOFException.INVALID_TYPE_SECTION_SIZE,\n ),\n Container(\n name=\"type_section_too_big_single_code_section\",\n sections=[\n Section(kind=SectionKind.TYPE, data=\"0x0080000000\"),\n Section.Code(Op.STOP),\n ],\n auto_type_section=AutoSection.NONE,\n validity_error=EOFException.INVALID_TYPE_SECTION_SIZE,\n ),\n Container(\n name=\"type_section_too_small_multiple_code_sections_1\",\n sections=[\n Section(kind=SectionKind.TYPE, data=\"0x0080000000\"),\n Section.Code(Op.STOP),\n Section.Code(Op.STOP),\n ],\n auto_type_section=AutoSection.NONE,\n validity_error=EOFException.INVALID_TYPE_SECTION_SIZE,\n ),\n Container(\n name=\"type_section_too_small_multiple_code_sections_2\",\n sections=[\n Section(kind=SectionKind.TYPE, data=\"0x008000000080\"),\n Section.Code(Op.STOP),\n Section.Code(Op.STOP),\n ],\n auto_type_section=AutoSection.NONE,\n validity_error=EOFException.INVALID_TYPE_SECTION_SIZE,\n ),\n Container(\n name=\"type_section_too_big_multiple_code_sections\",\n sections=[\n Section(kind=SectionKind.TYPE, data=\"0x008000000080000000\"),\n Section.Code(Op.STOP),\n Section.Code(Op.STOP),\n ],\n auto_type_section=AutoSection.NONE,\n validity_error=EOFException.INVALID_TYPE_SECTION_SIZE,\n ),\n Container(\n name=\"invalid_first_code_section_inputs_0x01\",\n sections=[Section.Code(code=Op.POP + Op.RETF, code_inputs=1)],\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n Container(\n name=\"invalid_first_code_section_inputs_0x80\",\n sections=[Section.Code(code=Op.POP + Op.RETF, code_inputs=0x80)],\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n Container(\n name=\"invalid_first_code_section_inputs_0xff\",\n sections=[Section.Code(code=Op.POP + Op.RETF, code_inputs=0xFF)],\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n Container(\n name=\"invalid_first_code_section_outputs_0x00\",\n sections=[Section.Code(code=Op.PUSH0 + Op.RETF, code_outputs=0)],\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n Container(\n name=\"invalid_first_code_section_outputs_0x7f\",\n sections=[Section.Code(code=Op.PUSH0 + Op.RETF, code_outputs=0x7F)],\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n Container(\n name=\"invalid_first_code_section_outputs_0x81\",\n sections=[Section.Code(code=Op.PUSH0 + Op.RETF, code_outputs=0x81)],\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n Container(\n name=\"invalid_first_code_section_outputs_0xff\",\n sections=[Section.Code(code=Op.PUSH0 + Op.RETF, code_outputs=0xFF)],\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n Container(\n name=\"multiple_code_section_non_zero_inputs\",\n sections=[\n Section.Code(code=Op.POP + Op.RETF, code_inputs=1),\n Section.Code(Op.STOP),\n ],\n # TODO the actual exception should be EOFException.INVALID_TYPE_BODY,\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n Container(\n name=\"multiple_code_section_non_zero_outputs\",\n sections=[\n Section.Code(code=Op.PUSH0, code_outputs=1),\n Section.Code(Op.STOP),\n ],\n # TODO the actual exception should be EOFException.INVALID_TYPE_BODY,\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n Container(\n name=\"data_section_before_code_with_type\",\n sections=[\n Section.Data(data=\"0xAA\"),\n Section.Code(Op.STOP),\n ],\n auto_sort_sections=AutoSection.NONE,\n validity_error=[EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"data_section_listed_in_type\",\n sections=[\n Section.Data(data=\"0x00\", force_type_listing=True),\n Section.Code(Op.STOP),\n ],\n validity_error=[\n EOFException.INVALID_TYPE_SECTION_SIZE,\n EOFException.INVALID_SECTION_BODIES_SIZE,\n ],\n ),\n Container(\n name=\"single_code_section_incomplete_type\",\n sections=[\n Section(kind=SectionKind.TYPE, data=\"0x00\", custom_size=2),\n Section.Code(Op.STOP),\n ],\n validity_error=[\n EOFException.INVALID_SECTION_BODIES_SIZE,\n EOFException.INVALID_TYPE_SECTION_SIZE,\n ],\n ),\n Container(\n name=\"code_section_input_too_large\",\n sections=[\n Section.Code(\n code=((Op.PUSH0 * (MAX_CODE_INPUTS + 1)) + Op.CALLF[1] + Op.STOP),\n max_stack_height=(MAX_CODE_INPUTS + 1),\n ),\n Section.Code(\n code=(Op.POP * (MAX_CODE_INPUTS + 1)) + Op.RETF,\n code_inputs=(MAX_CODE_INPUTS + 1),\n code_outputs=0,\n max_stack_height=0,\n ),\n ],\n validity_error=EOFException.INPUTS_OUTPUTS_NUM_ABOVE_LIMIT,\n ),\n Container(\n name=\"invalid_inputs_to_non_returning_code_section_2\",\n sections=[\n Section.Code(\n code=Op.PUSH1(0) * 128 + Op.CALLF[1] + Op.STOP,\n max_stack_height=128,\n ),\n Section.Code(\n Op.STOP,\n code_inputs=128,\n code_outputs=0,\n max_stack_height=128,\n ),\n ],\n validity_error=EOFException.INPUTS_OUTPUTS_NUM_ABOVE_LIMIT,\n ),\n Container(\n name=\"code_section_output_too_large\",\n sections=[\n Section.Code(\n code=(Op.CALLF[1] + Op.STOP),\n max_stack_height=(MAX_CODE_OUTPUTS + 2),\n ),\n Section.Code(\n code=(Op.PUSH0 * (MAX_CODE_OUTPUTS + 2)) + Op.RETF,\n code_inputs=0,\n code_outputs=(MAX_CODE_OUTPUTS + 2),\n max_stack_height=(MAX_CODE_OUTPUTS + 2),\n ),\n ],\n validity_error=EOFException.INPUTS_OUTPUTS_NUM_ABOVE_LIMIT,\n ),\n Container(\n name=\"code_section_output_too_large_2\",\n sections=[\n Section.Code(\n code=Op.JUMPF[1],\n ),\n Section.Code(\n code=(Op.PUSH0 * (MAX_CODE_OUTPUTS + 1)) + Op.RETF,\n code_inputs=0,\n code_outputs=(MAX_CODE_OUTPUTS + 1),\n max_stack_height=(MAX_CODE_OUTPUTS + 1),\n ),\n ],\n validity_error=EOFException.INVALID_NON_RETURNING_FLAG,\n ),\n Container(\n name=\"single_code_section_max_stack_size_too_large\",\n sections=[\n Section.Code(\n code=Op.CALLER * 1024 + Op.POP * 1024 + Op.STOP,\n max_stack_height=1024,\n ),\n ],\n # TODO auto types section generation probably failed, the exception must be about code\n validity_error=EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT,\n ),\n ],\n ids=lambda c: c.name,\n)\ndef test_invalid_containers(\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_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 intests/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 intests/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 intests/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=\"single_code_section\",\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 intests/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_valid_containers[fork_CancunEIP7692-eof_test-single_code_section_with_data_section]\ntest_valid_containers[fork_CancunEIP7692-eof_test-single_code_section_max_stack_size]\ntest_valid_containers[fork_CancunEIP7692-eof_test-code_section_with_inputs_outputs]\ntest_valid_containers[fork_CancunEIP7692-eof_test-code_section_input_maximum]\ntest_valid_containers[fork_CancunEIP7692-eof_test-code_section_output_maximum]\ntest_valid_containers[fork_CancunEIP7692-eof_test-multiple_code_sections]\ntest_valid_containers[fork_CancunEIP7692-eof_test-multiple_code_sections_max_inputs_max_outputs]\ntest_valid_containers[fork_CancunEIP7692-eof_test-single_subcontainer_without_data]\ntest_valid_containers[fork_CancunEIP7692-eof_test-single_subcontainer_with_data]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-empty_container]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-single_code_section_no_data_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-incomplete_magic]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_version]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_type_header]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_type_section_size]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-incomplete_type_section_size]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_code_header]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_code_header_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_code_header_3]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_count_missing]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_count_incomplete]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_size_missing]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_size_incomplete]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_count_0x8000_truncated]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_count_0xFFFF_truncated]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_count_0x8000]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_count_0xFFFF]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_size_0x8000_truncated]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_size_0xFFFF_truncated]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-terminator_incomplete]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-truncated_header_data_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_data_section_size]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-data_section_size_incomplete]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_container_section_count]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-incomplete_container_section_count]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-zero_container_section_count]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_container_section_size]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-incomplete_container_section_size]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-incomplete_container_section_size_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-incomplete_container_section_size_3]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-zero_size_container_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-truncated_header_data_section_with_container_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_data_section_size_with_container_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-data_section_size_incomplete_with_container_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_sections]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_code_section_header]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-too_many_code_sections]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-zero_code_sections_header]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-zero_code_sections_header_empty_type_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_1]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_3]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_section_bodies_ok_1]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_section_bodies_ok_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_nonzero]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_nonzero_1]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_nonzero_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_nonzero_3]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_nonzero_4]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-truncated_before_type_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-truncated_type_section_before_outputs]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-truncated_type_section_before_max_stack_height]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-truncated_type_section_truncated_max_stack_height]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_code_section_contents]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-incomplete_code_section_contents]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-trailing_bytes_after_code_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-empty_code_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-empty_code_section_with_non_empty_data]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_container_section_contents]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_container_section_contents_with_data]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_data_section_contents]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-data_section_contents_incomplete]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-data_section_preceding_code_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-data_section_without_code_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_3a]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_4a]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-trailing_bytes_after_data_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-multiple_data_sections]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-multiple_code_headers]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-multiple_code_headers_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-duplicated_code_header]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-multiple_code_and_data_sections]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-multiple_code_and_data_sections_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-multiple_container_headers]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-multiple_container_headers_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-duplicated_container_header]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-unknown_section_1]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-unknown_section_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-unknown_section_empty]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_type_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-too_many_type_sections]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-too_many_type_sections_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-empty_type_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-type_section_too_small_single_code_section_1]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-type_section_too_small_single_code_section_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-type_section_too_big_single_code_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-type_section_too_small_multiple_code_sections_1]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-type_section_too_small_multiple_code_sections_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-type_section_too_big_multiple_code_sections]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-invalid_first_code_section_inputs_0x01]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-invalid_first_code_section_inputs_0x80]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-invalid_first_code_section_inputs_0xff]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-invalid_first_code_section_outputs_0x00]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-invalid_first_code_section_outputs_0x7f]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-invalid_first_code_section_outputs_0x81]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-invalid_first_code_section_outputs_0xff]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-multiple_code_section_non_zero_inputs]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-multiple_code_section_non_zero_outputs]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-data_section_before_code_with_type]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-data_section_listed_in_type]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-single_code_section_incomplete_type]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_input_too_large]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-invalid_inputs_to_non_returning_code_section_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_output_too_large]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_output_too_large_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-single_code_section_max_stack_size_too_large]\ntest_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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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_opcodes_in_legacy/","title":"Test Opcodes In Legacy","text":"Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_opcodes_in_legacy.py
.
Generate fixtures for these test cases for Prague with:
Prague only:
fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_opcodes_in_legacy.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_opcodes_in_legacy.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n
Tests all EOF-only opcodes in legacy contracts and expects failure.
"},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_opcodes_in_legacy/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_opcodes_in_legacy.test_opcodes_in_legacy","title":"test_opcodes_in_legacy(state_test, pre, code)
","text":"Test all EOF only opcodes in legacy contracts and expects failure.
Source code intests/prague/eip7692_eof_v1/eip3540_eof_v1/test_opcodes_in_legacy.py
@pytest.mark.parametrize(\n \"code\",\n eof_opcode_blocks,\n)\ndef test_opcodes_in_legacy(state_test: StateTestFiller, pre: Alloc, code: Opcodes):\n \"\"\"\n Test all EOF only opcodes in legacy contracts and expects failure.\n \"\"\"\n env = Environment()\n\n address_test_contract = pre.deploy_contract(\n code=code + Op.SSTORE(slot_code_executed, value_code_executed),\n storage={slot_code_executed: value_non_execution_canary},\n )\n\n post = {\n # assert the canary is not over-written. If it was written then the EOF opcode was valid\n address_test_contract: Account(storage={slot_code_executed: value_non_execution_canary}),\n }\n\n sender = pre.fund_eoa()\n\n tx = Transaction(\n sender=sender,\n to=address_test_contract,\n gas_limit=5_000_000,\n gas_price=10,\n protected=False,\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/eip3540_eof_v1/test_opcodes_in_legacy/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_opcodes_in_legacy.test_opcodes_in_create_tx","title":"test_opcodes_in_create_tx(state_test, pre, code)
","text":"Test all EOF only opcodes in legacy contracts and expects failure.
Source code intests/prague/eip7692_eof_v1/eip3540_eof_v1/test_opcodes_in_legacy.py
@pytest.mark.parametrize(\n \"code\",\n eof_opcode_blocks,\n)\ndef test_opcodes_in_create_tx(state_test: StateTestFiller, pre: Alloc, code: Opcodes):\n \"\"\"\n Test all EOF only opcodes in legacy contracts and expects failure.\n \"\"\"\n env = Environment()\n\n sender = pre.fund_eoa()\n\n tx = Transaction(\n sender=sender,\n to=None,\n gas_limit=5_000_000,\n gas_price=10,\n protected=False,\n data=code,\n )\n\n post = {\n # Should revert in initcode, which results in no contract created\n tx.created_contract: Account.NONEXISTENT\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_opcodes_in_legacy/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_opcodes_in_legacy.test_opcodes_in_create_operation","title":"test_opcodes_in_create_operation(state_test, pre, code, legacy_create_opcode)
","text":"Test all EOF only opcodes in legacy contracts and expects failure.
Source code intests/prague/eip7692_eof_v1/eip3540_eof_v1/test_opcodes_in_legacy.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 \"code\",\n eof_opcode_blocks,\n)\ndef test_opcodes_in_create_operation(\n state_test: StateTestFiller,\n pre: Alloc,\n code: Opcodes,\n legacy_create_opcode: Opcodes,\n):\n \"\"\"\n Test all EOF only opcodes in legacy contracts and expects failure.\n \"\"\"\n env = Environment()\n\n init_code = Initcode(initcode_prefix=code, deploy_code=Op.RETURN(0, 0))\n factory_code = (\n Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n + Op.SSTORE(slot_create_address, legacy_create_opcode(size=Op.CALLDATASIZE))\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 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/eip3540_eof_v1/test_opcodes_in_legacy/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_opcodes_in_legacy.test_opcodes_in_eof_calling_legacy","title":"test_opcodes_in_eof_calling_legacy(state_test, pre, code, ext_call_opcode)
","text":"Test all EOF only opcodes in legacy contracts and expects failure.
Source code intests/prague/eip7692_eof_v1/eip3540_eof_v1/test_opcodes_in_legacy.py
@pytest.mark.parametrize(\n (\"ext_call_opcode\"),\n [\n pytest.param(Op.EXTCALL, id=\"EXTCALL\"),\n pytest.param(Op.EXTDELEGATECALL, id=\"EXTDELEGATECALL\"),\n pytest.param(Op.EXTSTATICCALL, id=\"EXTSTATICCALL\"),\n ],\n)\n@pytest.mark.parametrize(\n \"code\",\n eof_opcode_blocks,\n)\ndef test_opcodes_in_eof_calling_legacy(\n state_test: StateTestFiller,\n pre: Alloc,\n code: Opcodes,\n ext_call_opcode: Op,\n):\n \"\"\"\n Test all EOF only opcodes in legacy contracts and expects failure.\n \"\"\"\n env = Environment()\n\n address_test_contract = pre.deploy_contract(\n code=code + Op.SSTORE(slot_code_executed, value_code_executed),\n storage={slot_code_executed: value_non_execution_canary},\n )\n\n address_entry_contract = pre.deploy_contract(\n code=Container(\n sections=[\n Section.Code(\n ext_call_opcode(address=address_test_contract)\n + Op.SSTORE(slot_code_worked, value_code_worked)\n + Op.STOP\n )\n ]\n ),\n storage={slot_code_executed: value_non_execution_canary},\n )\n\n post = {\n # assert the canary is not over-written. If it was written then the EOF opcode was valid\n address_test_contract: Account(storage={slot_code_executed: value_non_execution_canary}),\n address_entry_contract: Account(\n storage={\n slot_code_executed: value_non_execution_canary,\n slot_code_worked: value_code_worked,\n }\n ),\n }\n\n sender = pre.fund_eoa()\n\n tx = Transaction(\n sender=sender,\n to=address_entry_contract,\n gas_limit=5_000_000,\n gas_price=10,\n protected=False,\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/eip3540_eof_v1/test_opcodes_in_legacy/index/test_cases/","title":"Test Opcodes In Legacy - Test Cases","text":"Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_opcodes_in_legacy.py
Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_opcodes_in_legacy.py
:
test_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-DUPN]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-SWAPN]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-EXCHANGE]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-RJUMP]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-RJUMPI0]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-RJUMPI1]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-CALLF]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-RETF]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-JUMPF]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-EXTCALL]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-EXTDELEGATECALL]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-EXTSTATICCALL]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-DATALOAD]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-DATALOADN]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-DATASIZE]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-DATACOPY]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-EOFCREATE]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-RETURNCONTRACT]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-DUPN]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-SWAPN]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-EXCHANGE]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMP]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMPI0]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMPI1]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-CALLF]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-RETF]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-JUMPF]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTCALL]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTDELEGATECALL]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTSTATICCALL]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-DATALOAD]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-DATALOADN]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-DATASIZE]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-DATACOPY]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-EOFCREATE]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-RETURNCONTRACT]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-DUPN]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-SWAPN]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-EXCHANGE]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-RJUMP]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-RJUMPI0]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-RJUMPI1]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-CALLF]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-RETF]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-JUMPF]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-EXTCALL]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-EXTDELEGATECALL]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-EXTSTATICCALL]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-DATALOAD]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-DATALOADN]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-DATASIZE]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-DATACOPY]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-EOFCREATE]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-RETURNCONTRACT]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-DUPN]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-SWAPN]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-EXCHANGE]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-RJUMP]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-RJUMPI0]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-RJUMPI1]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-CALLF]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-RETF]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-JUMPF]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-EXTCALL]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-EXTDELEGATECALL]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-EXTSTATICCALL]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-DATALOAD]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-DATALOADN]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-DATASIZE]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-DATACOPY]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-EOFCREATE]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-RETURNCONTRACT]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-DUPN]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-SWAPN]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-EXCHANGE]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-RJUMP]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-RJUMPI0]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-RJUMPI1]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-CALLF]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-RETF]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-JUMPF]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-EXTCALL]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-EXTDELEGATECALL]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-EXTSTATICCALL]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-DATALOAD]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-DATALOADN]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-DATASIZE]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-DATACOPY]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-EOFCREATE]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-RETURNCONTRACT]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-DUPN]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-SWAPN]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-EXCHANGE]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-RJUMP]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-RJUMPI0]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-RJUMPI1]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-CALLF]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-RETF]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-JUMPF]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-EXTCALL]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-EXTDELEGATECALL]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-EXTSTATICCALL]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-DATALOAD]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-DATALOADN]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-DATASIZE]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-DATACOPY]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-EOFCREATE]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-RETURNCONTRACT]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-DUPN-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-DUPN-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-SWAPN-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-SWAPN-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-EXCHANGE-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-EXCHANGE-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-RJUMP-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-RJUMP-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-RJUMPI0-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-RJUMPI0-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-RJUMPI1-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-RJUMPI1-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-CALLF-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-CALLF-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-RETF-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-RETF-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-JUMPF-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-JUMPF-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-EXTCALL-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-EXTCALL-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-EXTDELEGATECALL-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-EXTDELEGATECALL-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-EXTSTATICCALL-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-EXTSTATICCALL-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-DATALOAD-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-DATALOAD-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-DATALOADN-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-DATALOADN-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-DATASIZE-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-DATASIZE-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-DATACOPY-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-DATACOPY-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-EOFCREATE-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-EOFCREATE-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-RETURNCONTRACT-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-RETURNCONTRACT-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-DUPN-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-DUPN-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-SWAPN-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-SWAPN-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-EXCHANGE-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-EXCHANGE-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-RJUMP-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-RJUMP-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-RJUMPI0-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-RJUMPI0-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-RJUMPI1-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-RJUMPI1-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-CALLF-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-CALLF-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-RETF-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-RETF-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-JUMPF-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-JUMPF-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-EXTCALL-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-EXTCALL-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-EXTDELEGATECALL-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-EXTDELEGATECALL-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-EXTSTATICCALL-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-EXTSTATICCALL-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-DATALOAD-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-DATALOAD-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-DATALOADN-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-DATALOADN-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-DATASIZE-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-DATASIZE-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-DATACOPY-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-DATACOPY-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-EOFCREATE-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-EOFCREATE-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-RETURNCONTRACT-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-RETURNCONTRACT-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-DUPN-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-DUPN-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-SWAPN-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-SWAPN-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-EXCHANGE-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-EXCHANGE-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-RJUMP-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-RJUMP-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-RJUMPI0-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-RJUMPI0-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-RJUMPI1-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-RJUMPI1-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-CALLF-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-CALLF-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-RETF-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-RETF-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-JUMPF-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-JUMPF-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-EXTCALL-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-EXTCALL-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-EXTDELEGATECALL-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-EXTDELEGATECALL-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-EXTSTATICCALL-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-EXTSTATICCALL-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-DATALOAD-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-DATALOAD-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-DATALOADN-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-DATALOADN-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-DATASIZE-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-DATASIZE-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-DATACOPY-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-DATACOPY-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-EOFCREATE-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-EOFCREATE-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-RETURNCONTRACT-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-RETURNCONTRACT-CREATE2]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DUPN-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DUPN-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DUPN-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-SWAPN-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-SWAPN-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-SWAPN-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXCHANGE-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXCHANGE-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXCHANGE-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RJUMP-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RJUMP-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RJUMP-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RJUMPI0-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RJUMPI0-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RJUMPI0-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RJUMPI1-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RJUMPI1-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RJUMPI1-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-CALLF-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-CALLF-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-CALLF-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RETF-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RETF-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RETF-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-JUMPF-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-JUMPF-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-JUMPF-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXTCALL-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXTCALL-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXTCALL-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXTDELEGATECALL-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXTDELEGATECALL-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXTDELEGATECALL-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXTSTATICCALL-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXTSTATICCALL-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXTSTATICCALL-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATALOAD-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATALOAD-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATALOAD-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATALOADN-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATALOADN-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATALOADN-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATASIZE-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATASIZE-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATASIZE-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATACOPY-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATACOPY-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATACOPY-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EOFCREATE-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EOFCREATE-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EOFCREATE-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RETURNCONTRACT-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RETURNCONTRACT-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RETURNCONTRACT-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DUPN-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DUPN-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DUPN-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-SWAPN-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-SWAPN-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-SWAPN-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXCHANGE-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXCHANGE-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXCHANGE-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMP-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMP-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMP-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMPI0-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMPI0-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMPI0-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMPI1-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMPI1-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMPI1-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-CALLF-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-CALLF-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-CALLF-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RETF-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RETF-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RETF-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-JUMPF-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-JUMPF-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-JUMPF-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTCALL-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTCALL-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTCALL-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTDELEGATECALL-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTDELEGATECALL-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTDELEGATECALL-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTSTATICCALL-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTSTATICCALL-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTSTATICCALL-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATALOAD-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATALOAD-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATALOAD-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATALOADN-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATALOADN-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATALOADN-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATASIZE-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATASIZE-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATASIZE-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATACOPY-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATACOPY-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATACOPY-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EOFCREATE-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EOFCREATE-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EOFCREATE-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RETURNCONTRACT-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RETURNCONTRACT-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RETURNCONTRACT-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DUPN-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DUPN-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DUPN-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-SWAPN-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-SWAPN-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-SWAPN-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXCHANGE-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXCHANGE-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXCHANGE-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RJUMP-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RJUMP-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RJUMP-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RJUMPI0-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RJUMPI0-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RJUMPI0-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RJUMPI1-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RJUMPI1-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RJUMPI1-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-CALLF-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-CALLF-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-CALLF-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RETF-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RETF-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RETF-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-JUMPF-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-JUMPF-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-JUMPF-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXTCALL-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXTCALL-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXTCALL-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXTDELEGATECALL-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXTDELEGATECALL-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXTDELEGATECALL-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXTSTATICCALL-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXTSTATICCALL-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXTSTATICCALL-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATALOAD-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATALOAD-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATALOAD-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATALOADN-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATALOADN-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATALOADN-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATASIZE-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATASIZE-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATASIZE-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATACOPY-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATACOPY-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATACOPY-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EOFCREATE-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EOFCREATE-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EOFCREATE-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RETURNCONTRACT-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RETURNCONTRACT-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RETURNCONTRACT-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/eip3540_eof_v1/test_opcodes_in_legacy.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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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
.
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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 EOFCREATE
s 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.
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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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_set_code_tx/","title":"EIP-7702 Set Code Tx","text":"Documentation for tests/prague/eip7702_set_code_tx
.
Generate fixtures for these test cases for Prague with:
Prague only:
fill -v tests/prague/eip7702_set_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_set_code_tx --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n
Cross-client EIP-7702 Tests
"},{"location":"tests/prague/eip7702_set_code_tx/spec/","title":"Spec","text":"Documentation for tests/prague/eip7702_set_code_tx/spec.py
.
Defines EIP-7702 specification constants and functions.
"},{"location":"tests/prague/eip7702_set_code_tx/spec/#tests.prague.eip7702_set_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 intests/prague/eip7702_set_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 = 2_500\n PER_EMPTY_ACCOUNT_COST = 25_000\n DELEGATION_DESIGNATION = bytes.fromhex(\"ef0100\")\n\n @staticmethod\n def delegation_designation(address: Address) -> Bytes:\n \"\"\"\n Returns the delegation designation for the given address.\n \"\"\"\n return Bytes(Spec.DELEGATION_DESIGNATION + bytes(address))\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_gas/","title":"Test Gas","text":"Documentation for tests/prague/eip7702_set_code_tx/test_gas.py
.
Generate fixtures for these test cases for Prague with:
Prague only:
fill -v tests/prague/eip7702_set_code_tx/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/eip7702_set_code_tx/test_gas.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n
Tests related to gas of set-code transactions from EIP-7702: Set EOA account code for one transaction Tests related to gas of set-code transactions from EIP-7702: Set EOA account code for one transaction.
"},{"location":"tests/prague/eip7702_set_code_tx/test_gas/#tests.prague.eip7702_set_code_tx.test_gas.test_gas_cost","title":"test_gas_cost(state_test, pre, authorization_list_with_properties, authorization_list, data, access_list, sender)
","text":"Test gas at the execution start of a set-code transaction in multiple scenarios.
Source code intests/prague/eip7702_set_code_tx/test_gas.py
@pytest.mark.parametrize(**gas_test_parameter_args(include_pre_authorized=False))\ndef test_gas_cost(\n state_test: StateTestFiller,\n pre: Alloc,\n authorization_list_with_properties: List[AuthorizationWithProperties],\n authorization_list: List[AuthorizationTuple],\n data: bytes,\n access_list: List[AccessList],\n sender: EOA,\n):\n \"\"\"\n Test gas at the execution start of a set-code transaction in multiple scenarios.\n \"\"\"\n intrinsic_gas = (\n 21_000\n + eip_2028_transaction_data_cost(data)\n + 1900 * sum(len(al.storage_keys) for al in access_list)\n + 2400 * len(access_list)\n )\n # Calculate the intrinsic gas cost of the authorizations, by default the\n # full empty account cost is charged for each authorization.\n intrinsic_gas += Spec.PER_EMPTY_ACCOUNT_COST * len(authorization_list_with_properties)\n\n discounted_authorizations = 0\n seen_authority = set()\n for authorization_with_properties in authorization_list_with_properties:\n if authorization_with_properties.invalidity_type is None:\n authority = authorization_with_properties.tuple.signer\n if not authorization_with_properties.empty:\n seen_authority.add(authority)\n if authority in seen_authority:\n discounted_authorizations += 1\n else:\n seen_authority.add(authority)\n\n discount_gas = (\n Spec.PER_EMPTY_ACCOUNT_COST - Spec.PER_AUTH_BASE_COST\n ) * discounted_authorizations\n\n # We calculate the exact gas required to execute the test code.\n # We add SSTORE opcodes in order to make sure that the refund is less than one fifth (EIP-3529)\n # of the total gas used, so we can see the full discount being reflected in most of the tests.\n gas_opcode_cost = 2\n sstore_opcode_count = 10\n push_opcode_count = (2 * (sstore_opcode_count)) - 1\n push_opcode_cost = 3 * push_opcode_count\n sstore_opcode_cost = 20_000 * sstore_opcode_count\n cold_storage_cost = 2_100 * sstore_opcode_count\n\n execution_gas = gas_opcode_cost + push_opcode_cost + sstore_opcode_cost + cold_storage_cost\n\n # The first opcode that executes in the code is the GAS opcode, which costs 2 gas, so we\n # subtract that from the expected gas measure.\n expected_gas_measure = execution_gas - gas_opcode_cost\n\n test_code_storage = Storage()\n test_code = (\n Op.SSTORE(test_code_storage.store_next(expected_gas_measure), Op.GAS)\n + sum(\n Op.SSTORE(test_code_storage.store_next(1), 1) for _ in range(sstore_opcode_count - 1)\n )\n + Op.STOP\n )\n test_code_address = pre.deploy_contract(test_code)\n\n tx_gas_limit = intrinsic_gas + execution_gas\n tx_max_fee_per_gas = 7\n tx_exact_cost = tx_gas_limit * tx_max_fee_per_gas\n\n # EIP-3529\n max_discount = tx_gas_limit // 5\n\n if discount_gas > max_discount:\n # Only one test hits this condition, but it's ok to also test this case.\n discount_gas = max_discount\n\n discount_cost = discount_gas * tx_max_fee_per_gas\n\n sender_account = pre[sender]\n assert sender_account is not None\n\n tx = Transaction(\n gas_limit=tx_gas_limit,\n max_fee_per_gas=tx_max_fee_per_gas,\n to=test_code_address,\n value=0,\n data=data,\n authorization_list=authorization_list,\n access_list=access_list,\n sender=sender,\n )\n\n state_test(\n env=Environment(gas_limit=max(tx_gas_limit, 30_000_000)),\n pre=pre,\n tx=tx,\n post={\n test_code_address: Account(storage=test_code_storage),\n sender: Account(balance=sender_account.balance - tx_exact_cost + discount_cost),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_gas/#tests.prague.eip7702_set_code_tx.test_gas.test_account_warming","title":"test_account_warming(state_test, pre, authorization_list_with_properties, authorization_list, access_list_case, access_list, data, sender, check_delegated_account_first)
","text":"Test warming of the authority and authorized accounts for set-code transactions.
Source code intests/prague/eip7702_set_code_tx/test_gas.py
@pytest.mark.parametrize(\"check_delegated_account_first\", [True, False])\n@pytest.mark.parametrize(**gas_test_parameter_args(include_many=False, include_data=False))\ndef test_account_warming(\n state_test: StateTestFiller,\n pre: Alloc,\n authorization_list_with_properties: List[AuthorizationWithProperties],\n authorization_list: List[AuthorizationTuple],\n access_list_case: AccessListType,\n access_list: List[AccessList],\n data: bytes,\n sender: EOA,\n check_delegated_account_first: bool,\n):\n \"\"\"\n Test warming of the authority and authorized accounts for set-code transactions.\n \"\"\"\n # Overhead cost is the single push operation required for the address to check.\n OVERHEAD_COST = 3\n\n COLD_ACCOUNT_COST = 2600\n WARM_ACCOUNT_COST = 100\n\n # Dictionary to keep track of the addresses to check for warming, and the expected cost of\n # accessing such account.\n addresses_to_check: Dict[Address, int] = {}\n\n for authorization_with_properties in authorization_list_with_properties:\n authority = authorization_with_properties.tuple.signer\n assert authority is not None, \"authority address is not set\"\n delegated_account = authorization_with_properties.tuple.address\n\n if check_delegated_account_first:\n if delegated_account not in addresses_to_check:\n addresses_to_check[delegated_account] = (\n WARM_ACCOUNT_COST\n if access_list_case.contains_set_code_address()\n else COLD_ACCOUNT_COST\n )\n\n if authority not in addresses_to_check:\n if not authorization_with_properties.skip:\n if (\n authorization_with_properties.invalidity_type is None\n or (\n authorization_with_properties.invalidity_type\n != AuthorizationInvalidityType.INVALID_CHAIN_ID\n )\n or access_list_case.contains_authority()\n ):\n access_cost = WARM_ACCOUNT_COST\n else:\n access_cost = COLD_ACCOUNT_COST\n if authorization_with_properties.invalidity_type is None:\n access_cost += WARM_ACCOUNT_COST\n else:\n access_cost = (\n COLD_ACCOUNT_COST\n if Address(sender) != authorization_with_properties.tuple.signer\n else WARM_ACCOUNT_COST\n )\n if authorization_with_properties.invalidity_type is None:\n access_cost += WARM_ACCOUNT_COST\n\n addresses_to_check[authority] = access_cost\n\n else:\n if authority not in addresses_to_check:\n access_cost = (\n COLD_ACCOUNT_COST\n if Address(sender) != authorization_with_properties.tuple.signer\n else WARM_ACCOUNT_COST\n )\n if not authorization_with_properties.skip and (\n authorization_with_properties.invalidity_type is None\n or (\n authorization_with_properties.invalidity_type\n != AuthorizationInvalidityType.INVALID_CHAIN_ID\n )\n or access_list_case.contains_authority()\n ):\n access_cost = WARM_ACCOUNT_COST\n\n if (\n # We can only charge the delegated account access cost if the authorization\n # went through\n authorization_with_properties.invalidity_type\n is None\n ):\n if (\n delegated_account in addresses_to_check\n or access_list_case.contains_set_code_address()\n ):\n access_cost += WARM_ACCOUNT_COST\n else:\n access_cost += COLD_ACCOUNT_COST\n\n addresses_to_check[authority] = access_cost\n\n if delegated_account not in addresses_to_check:\n if (\n authorization_with_properties.invalidity_type is None\n or access_list_case.contains_set_code_address()\n ):\n access_cost = WARM_ACCOUNT_COST\n else:\n access_cost = COLD_ACCOUNT_COST\n addresses_to_check[delegated_account] = access_cost\n\n callee_storage = Storage()\n callee_code: Bytecode = sum( # type: ignore\n (\n CodeGasMeasure(\n code=Op.EXTCODESIZE(check_address),\n overhead_cost=OVERHEAD_COST,\n extra_stack_items=1,\n sstore_key=callee_storage.store_next(access_cost),\n stop=False,\n )\n for check_address, access_cost in addresses_to_check.items()\n )\n )\n callee_code += Op.STOP\n callee_address = pre.deploy_contract(callee_code, storage=callee_storage.canary())\n\n tx = Transaction(\n gas_limit=1_000_000,\n to=callee_address,\n authorization_list=authorization_list if authorization_list else None,\n access_list=access_list,\n sender=sender,\n data=data,\n )\n post = {\n callee_address: Account(\n storage=callee_storage,\n ),\n }\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post=post,\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_gas/#tests.prague.eip7702_set_code_tx.test_gas.test_intrinsic_gas_cost","title":"test_intrinsic_gas_cost(state_test, pre, authorization_list, data, access_list, sender, valid)
","text":"Test sending a transaction with the exact intrinsic gas required and also insufficient gas.
Source code intests/prague/eip7702_set_code_tx/test_gas.py
@pytest.mark.parametrize(**gas_test_parameter_args(include_pre_authorized=False))\n@pytest.mark.parametrize(\n \"valid\",\n [True, False],\n)\ndef test_intrinsic_gas_cost(\n state_test: StateTestFiller,\n pre: Alloc,\n authorization_list: List[AuthorizationTuple],\n data: bytes,\n access_list: List[AccessList],\n sender: EOA,\n valid: bool,\n):\n \"\"\"\n Test sending a transaction with the exact intrinsic gas required and also insufficient\n gas.\n \"\"\"\n intrinsic_gas = (\n 21_000\n + eip_2028_transaction_data_cost(data)\n + 1900 * sum(len(al.storage_keys) for al in access_list)\n + 2400 * len(access_list)\n )\n # Calculate the intrinsic gas cost of the authorizations, by default the\n # full empty account cost is charged for each authorization.\n intrinsic_gas += Spec.PER_EMPTY_ACCOUNT_COST * len(authorization_list)\n\n tx_gas = intrinsic_gas\n if not valid:\n tx_gas -= 1\n\n test_code = Op.STOP\n test_code_address = pre.deploy_contract(test_code)\n\n tx = Transaction(\n gas_limit=tx_gas,\n to=test_code_address,\n value=0,\n data=data,\n authorization_list=authorization_list,\n access_list=access_list,\n sender=sender,\n error=TransactionException.INTRINSIC_GAS_TOO_LOW if not valid else None,\n )\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post={},\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_gas/#tests.prague.eip7702_set_code_tx.test_gas.test_self_set_code_cost","title":"test_self_set_code_cost(state_test, pre, pre_authorized)
","text":"Test set to code account access cost when it delegates to itself.
Source code intests/prague/eip7702_set_code_tx/test_gas.py
@pytest.mark.parametrize(\"pre_authorized\", [True, False])\ndef test_self_set_code_cost(\n state_test: StateTestFiller,\n pre: Alloc,\n pre_authorized: bool,\n):\n \"\"\"\n Test set to code account access cost when it delegates to itself.\n \"\"\"\n if pre_authorized:\n auth_signer = pre.fund_eoa(0, delegation=\"Self\")\n else:\n auth_signer = pre.fund_eoa(0)\n\n slot_call_cost = 1\n\n OVERHEAD_COST = 3\n\n callee_code = CodeGasMeasure(\n code=Op.EXTCODESIZE(address=auth_signer),\n overhead_cost=OVERHEAD_COST,\n extra_stack_items=1,\n sstore_key=slot_call_cost,\n )\n\n callee_address = pre.deploy_contract(callee_code)\n callee_storage = Storage()\n callee_storage[slot_call_cost] = 200 if not pre_authorized else 2700\n\n tx = Transaction(\n gas_limit=1_000_000,\n to=callee_address,\n authorization_list=[\n AuthorizationTuple(\n address=auth_signer,\n nonce=0,\n signer=auth_signer,\n ),\n ]\n if not pre_authorized\n else None,\n sender=pre.fund_eoa(),\n )\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post={\n callee_address: Account(storage=callee_storage),\n auth_signer: Account(\n nonce=1,\n code=Spec.delegation_designation(auth_signer),\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_gas/index/test_cases/","title":"Test Gas - Test Cases","text":"Test cases generated from tests/prague/eip7702_set_code_tx/test_gas.py
Parametrized test cases generated from the test module tests/prague/eip7702_set_code_tx/test_gas.py
:
test_gas_cost[fork_Prague-blockchain_test-single_valid_authorization_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_chain_specific_authorization_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test-multiple_valid_authorizations_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test-single_invalid_nonce_authorization_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test-single_invalid_authorization_invalid_chain_id_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test-multiple_invalid_nonce_authorizations_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test-multiple_invalid_nonce_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-blockchain_test-multiple_invalid_chain_id_authorizations_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test-multiple_valid_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-blockchain_test-first_valid_then_single_repeated_nonce_authorization]\ntest_gas_cost[fork_Prague-blockchain_test-first_valid_then_single_repeated_nonce_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_authorization_to_eoa]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_authorization_to_contract]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_authorization_with_authority_in_access_list]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_authorization_with_set_code_address_in_access_list]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_authorization_with_authority_and_set_code_address_in_access_list]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_authorization_eoa_authority]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_re_authorization_eoa_authority]\ntest_gas_cost[fork_Prague-blockchain_test-multiple_valid_authorizations_eoa_authority]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_authorization_eoa_self_sponsored_authority]\ntest_gas_cost[fork_Prague-blockchain_test-multiple_valid_authorizations_eoa_self_sponsored_authority]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_authorization_invalid_contract_authority]\ntest_gas_cost[fork_Prague-blockchain_test-multiple_authorizations_empty_account_then_contract_authority]\ntest_gas_cost[fork_Prague-blockchain_test-multiple_authorizations_eoa_then_contract_authority]\ntest_gas_cost[fork_Prague-blockchain_test-multiple_authorizations_eoa_self_sponsored_then_contract_authority]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_authorization_with_single_non_zero_byte_data]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_authorization_with_single_zero_byte_data]\ntest_gas_cost[fork_Prague-blockchain_test-many_valid_authorizations_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test-many_valid_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-blockchain_test-first_valid_then_many_duplicate_authorizations]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_authorization_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_chain_specific_authorization_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_invalid_nonce_authorization_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_invalid_authorization_invalid_chain_id_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test_engine-multiple_invalid_nonce_authorizations_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test_engine-multiple_invalid_nonce_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-blockchain_test_engine-multiple_invalid_chain_id_authorizations_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-blockchain_test_engine-first_valid_then_single_repeated_nonce_authorization]\ntest_gas_cost[fork_Prague-blockchain_test_engine-first_valid_then_single_repeated_nonce_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_authorization_to_eoa]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_authorization_to_contract]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_authorization_with_authority_in_access_list]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_authorization_with_set_code_address_in_access_list]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_authorization_with_authority_and_set_code_address_in_access_list]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_authorization_eoa_authority]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_re_authorization_eoa_authority]\ntest_gas_cost[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_eoa_authority]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_authorization_eoa_self_sponsored_authority]\ntest_gas_cost[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_eoa_self_sponsored_authority]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_authorization_invalid_contract_authority]\ntest_gas_cost[fork_Prague-blockchain_test_engine-multiple_authorizations_empty_account_then_contract_authority]\ntest_gas_cost[fork_Prague-blockchain_test_engine-multiple_authorizations_eoa_then_contract_authority]\ntest_gas_cost[fork_Prague-blockchain_test_engine-multiple_authorizations_eoa_self_sponsored_then_contract_authority]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_authorization_with_single_non_zero_byte_data]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_authorization_with_single_zero_byte_data]\ntest_gas_cost[fork_Prague-blockchain_test_engine-many_valid_authorizations_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test_engine-many_valid_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-blockchain_test_engine-first_valid_then_many_duplicate_authorizations]\ntest_gas_cost[fork_Prague-state_test-single_valid_authorization_single_signer]\ntest_gas_cost[fork_Prague-state_test-single_valid_chain_specific_authorization_single_signer]\ntest_gas_cost[fork_Prague-state_test-multiple_valid_authorizations_single_signer]\ntest_gas_cost[fork_Prague-state_test-single_invalid_nonce_authorization_single_signer]\ntest_gas_cost[fork_Prague-state_test-single_invalid_authorization_invalid_chain_id_single_signer]\ntest_gas_cost[fork_Prague-state_test-multiple_invalid_nonce_authorizations_single_signer]\ntest_gas_cost[fork_Prague-state_test-multiple_invalid_nonce_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-state_test-multiple_invalid_chain_id_authorizations_single_signer]\ntest_gas_cost[fork_Prague-state_test-multiple_valid_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-state_test-first_valid_then_single_repeated_nonce_authorization]\ntest_gas_cost[fork_Prague-state_test-first_valid_then_single_repeated_nonce_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-state_test-single_valid_authorization_to_eoa]\ntest_gas_cost[fork_Prague-state_test-single_valid_authorization_to_contract]\ntest_gas_cost[fork_Prague-state_test-single_valid_authorization_with_authority_in_access_list]\ntest_gas_cost[fork_Prague-state_test-single_valid_authorization_with_set_code_address_in_access_list]\ntest_gas_cost[fork_Prague-state_test-single_valid_authorization_with_authority_and_set_code_address_in_access_list]\ntest_gas_cost[fork_Prague-state_test-single_valid_authorization_eoa_authority]\ntest_gas_cost[fork_Prague-state_test-single_valid_re_authorization_eoa_authority]\ntest_gas_cost[fork_Prague-state_test-multiple_valid_authorizations_eoa_authority]\ntest_gas_cost[fork_Prague-state_test-single_valid_authorization_eoa_self_sponsored_authority]\ntest_gas_cost[fork_Prague-state_test-multiple_valid_authorizations_eoa_self_sponsored_authority]\ntest_gas_cost[fork_Prague-state_test-single_valid_authorization_invalid_contract_authority]\ntest_gas_cost[fork_Prague-state_test-multiple_authorizations_empty_account_then_contract_authority]\ntest_gas_cost[fork_Prague-state_test-multiple_authorizations_eoa_then_contract_authority]\ntest_gas_cost[fork_Prague-state_test-multiple_authorizations_eoa_self_sponsored_then_contract_authority]\ntest_gas_cost[fork_Prague-state_test-single_valid_authorization_with_single_non_zero_byte_data]\ntest_gas_cost[fork_Prague-state_test-single_valid_authorization_with_single_zero_byte_data]\ntest_gas_cost[fork_Prague-state_test-many_valid_authorizations_single_signer]\ntest_gas_cost[fork_Prague-state_test-many_valid_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-state_test-first_valid_then_many_duplicate_authorizations]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_chain_specific_authorization_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_chain_specific_authorization_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-multiple_valid_authorizations_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-multiple_valid_authorizations_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_invalid_nonce_authorization_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_invalid_nonce_authorization_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_invalid_authorization_invalid_chain_id_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_invalid_authorization_invalid_chain_id_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-multiple_invalid_nonce_authorizations_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-multiple_invalid_nonce_authorizations_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-multiple_invalid_nonce_authorizations_multiple_signers-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-multiple_invalid_nonce_authorizations_multiple_signers-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-multiple_invalid_chain_id_authorizations_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-multiple_invalid_chain_id_authorizations_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-multiple_valid_authorizations_multiple_signers-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-multiple_valid_authorizations_multiple_signers-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-first_valid_then_single_repeated_nonce_authorization-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-first_valid_then_single_repeated_nonce_authorization-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-first_valid_then_single_repeated_nonce_authorizations_multiple_signers-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-first_valid_then_single_repeated_nonce_authorizations_multiple_signers-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_to_eoa-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_to_eoa-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_to_contract-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_to_contract-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_with_authority_in_access_list-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_with_authority_in_access_list-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_with_set_code_address_in_access_list-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_with_set_code_address_in_access_list-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_with_authority_and_set_code_address_in_access_list-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_with_authority_and_set_code_address_in_access_list-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_eoa_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_eoa_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_re_authorization_eoa_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_re_authorization_eoa_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-multiple_valid_authorizations_eoa_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-multiple_valid_authorizations_eoa_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_eoa_self_sponsored_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_eoa_self_sponsored_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-multiple_valid_authorizations_eoa_self_sponsored_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-multiple_valid_authorizations_eoa_self_sponsored_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_invalid_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_invalid_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-multiple_authorizations_empty_account_then_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-multiple_authorizations_empty_account_then_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-multiple_authorizations_eoa_then_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-multiple_authorizations_eoa_then_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-multiple_authorizations_eoa_self_sponsored_then_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-multiple_authorizations_eoa_self_sponsored_then_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-pre_authorized_eoa_authority_no_re_authorization-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-pre_authorized_eoa_authority_no_re_authorization-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-pre_authorized_eoa_authority_no_re_authorization_self_sponsored-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-pre_authorized_eoa_authority_no_re_authorization_self_sponsored-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_chain_specific_authorization_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_chain_specific_authorization_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_invalid_nonce_authorization_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_invalid_nonce_authorization_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_invalid_authorization_invalid_chain_id_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_invalid_authorization_invalid_chain_id_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_invalid_nonce_authorizations_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_invalid_nonce_authorizations_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_invalid_nonce_authorizations_multiple_signers-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_invalid_nonce_authorizations_multiple_signers-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_invalid_chain_id_authorizations_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_invalid_chain_id_authorizations_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_multiple_signers-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_multiple_signers-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-first_valid_then_single_repeated_nonce_authorization-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-first_valid_then_single_repeated_nonce_authorization-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-first_valid_then_single_repeated_nonce_authorizations_multiple_signers-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-first_valid_then_single_repeated_nonce_authorizations_multiple_signers-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_to_eoa-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_to_eoa-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_to_contract-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_to_contract-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_with_authority_in_access_list-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_with_authority_in_access_list-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_with_set_code_address_in_access_list-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_with_set_code_address_in_access_list-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_with_authority_and_set_code_address_in_access_list-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_with_authority_and_set_code_address_in_access_list-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_eoa_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_eoa_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_re_authorization_eoa_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_re_authorization_eoa_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_eoa_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_eoa_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_eoa_self_sponsored_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_eoa_self_sponsored_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_eoa_self_sponsored_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_eoa_self_sponsored_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_invalid_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_invalid_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_authorizations_empty_account_then_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_authorizations_empty_account_then_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_authorizations_eoa_then_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_authorizations_eoa_then_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_authorizations_eoa_self_sponsored_then_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_authorizations_eoa_self_sponsored_then_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-pre_authorized_eoa_authority_no_re_authorization-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-pre_authorized_eoa_authority_no_re_authorization-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-pre_authorized_eoa_authority_no_re_authorization_self_sponsored-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-pre_authorized_eoa_authority_no_re_authorization_self_sponsored-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_valid_chain_specific_authorization_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_valid_chain_specific_authorization_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-multiple_valid_authorizations_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-multiple_valid_authorizations_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_invalid_nonce_authorization_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_invalid_nonce_authorization_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_invalid_authorization_invalid_chain_id_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_invalid_authorization_invalid_chain_id_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-multiple_invalid_nonce_authorizations_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-multiple_invalid_nonce_authorizations_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-multiple_invalid_nonce_authorizations_multiple_signers-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-multiple_invalid_nonce_authorizations_multiple_signers-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-multiple_invalid_chain_id_authorizations_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-multiple_invalid_chain_id_authorizations_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-multiple_valid_authorizations_multiple_signers-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-multiple_valid_authorizations_multiple_signers-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-first_valid_then_single_repeated_nonce_authorization-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-first_valid_then_single_repeated_nonce_authorization-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-first_valid_then_single_repeated_nonce_authorizations_multiple_signers-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-first_valid_then_single_repeated_nonce_authorizations_multiple_signers-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_to_eoa-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_to_eoa-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_to_contract-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_to_contract-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_with_authority_in_access_list-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_with_authority_in_access_list-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_with_set_code_address_in_access_list-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_with_set_code_address_in_access_list-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_with_authority_and_set_code_address_in_access_list-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_with_authority_and_set_code_address_in_access_list-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_eoa_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_eoa_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_valid_re_authorization_eoa_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_valid_re_authorization_eoa_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-multiple_valid_authorizations_eoa_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-multiple_valid_authorizations_eoa_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_eoa_self_sponsored_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_eoa_self_sponsored_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-multiple_valid_authorizations_eoa_self_sponsored_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-multiple_valid_authorizations_eoa_self_sponsored_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_invalid_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_invalid_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-multiple_authorizations_empty_account_then_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-multiple_authorizations_empty_account_then_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-multiple_authorizations_eoa_then_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-multiple_authorizations_eoa_then_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-multiple_authorizations_eoa_self_sponsored_then_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-multiple_authorizations_eoa_self_sponsored_then_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-pre_authorized_eoa_authority_no_re_authorization-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-pre_authorized_eoa_authority_no_re_authorization-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-pre_authorized_eoa_authority_no_re_authorization_self_sponsored-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-pre_authorized_eoa_authority_no_re_authorization_self_sponsored-check_delegated_account_first_False]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_chain_specific_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-multiple_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_invalid_nonce_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_invalid_authorization_invalid_chain_id_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-multiple_invalid_nonce_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-multiple_invalid_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-multiple_invalid_chain_id_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-multiple_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-first_valid_then_single_repeated_nonce_authorization]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-first_valid_then_single_repeated_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_authorization_to_eoa]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_authorization_to_contract]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_authorization_with_authority_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_authorization_with_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_authorization_with_authority_and_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_re_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-multiple_valid_authorizations_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_authorization_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-multiple_valid_authorizations_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_authorization_invalid_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-multiple_authorizations_empty_account_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-multiple_authorizations_eoa_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-multiple_authorizations_eoa_self_sponsored_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_authorization_with_single_non_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_authorization_with_single_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-many_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-many_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-first_valid_then_many_duplicate_authorizations]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_chain_specific_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-multiple_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_invalid_nonce_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_invalid_authorization_invalid_chain_id_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-multiple_invalid_nonce_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-multiple_invalid_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-multiple_invalid_chain_id_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-multiple_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-first_valid_then_single_repeated_nonce_authorization]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-first_valid_then_single_repeated_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_authorization_to_eoa]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_authorization_to_contract]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_authorization_with_authority_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_authorization_with_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_authorization_with_authority_and_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_re_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-multiple_valid_authorizations_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_authorization_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-multiple_valid_authorizations_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_authorization_invalid_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-multiple_authorizations_empty_account_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-multiple_authorizations_eoa_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-multiple_authorizations_eoa_self_sponsored_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_authorization_with_single_non_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_authorization_with_single_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-many_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-many_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-first_valid_then_many_duplicate_authorizations]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_chain_specific_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-multiple_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_invalid_nonce_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_invalid_authorization_invalid_chain_id_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-multiple_invalid_nonce_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-multiple_invalid_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-multiple_invalid_chain_id_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-multiple_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-first_valid_then_single_repeated_nonce_authorization]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-first_valid_then_single_repeated_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_authorization_to_eoa]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_authorization_to_contract]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_authorization_with_authority_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_authorization_with_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_authorization_with_authority_and_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_re_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-multiple_valid_authorizations_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_authorization_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-multiple_valid_authorizations_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_authorization_invalid_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-multiple_authorizations_empty_account_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-multiple_authorizations_eoa_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-multiple_authorizations_eoa_self_sponsored_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_authorization_with_single_non_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_authorization_with_single_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-many_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-many_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-first_valid_then_many_duplicate_authorizations]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_chain_specific_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-multiple_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_invalid_nonce_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_invalid_authorization_invalid_chain_id_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-multiple_invalid_nonce_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-multiple_invalid_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-multiple_invalid_chain_id_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-multiple_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-first_valid_then_single_repeated_nonce_authorization]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-first_valid_then_single_repeated_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_authorization_to_eoa]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_authorization_to_contract]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_authorization_with_authority_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_authorization_with_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_authorization_with_authority_and_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_re_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-multiple_valid_authorizations_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_authorization_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-multiple_valid_authorizations_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_authorization_invalid_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-multiple_authorizations_empty_account_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-multiple_authorizations_eoa_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-multiple_authorizations_eoa_self_sponsored_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_authorization_with_single_non_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_authorization_with_single_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-many_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-many_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-first_valid_then_many_duplicate_authorizations]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_chain_specific_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-multiple_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_invalid_nonce_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_invalid_authorization_invalid_chain_id_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-multiple_invalid_nonce_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-multiple_invalid_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-multiple_invalid_chain_id_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-multiple_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-first_valid_then_single_repeated_nonce_authorization]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-first_valid_then_single_repeated_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_authorization_to_eoa]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_authorization_to_contract]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_authorization_with_authority_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_authorization_with_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_authorization_with_authority_and_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_re_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-multiple_valid_authorizations_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_authorization_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-multiple_valid_authorizations_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_authorization_invalid_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-multiple_authorizations_empty_account_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-multiple_authorizations_eoa_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-multiple_authorizations_eoa_self_sponsored_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_authorization_with_single_non_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_authorization_with_single_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-many_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-many_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-first_valid_then_many_duplicate_authorizations]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_chain_specific_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-multiple_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_invalid_nonce_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_invalid_authorization_invalid_chain_id_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-multiple_invalid_nonce_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-multiple_invalid_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-multiple_invalid_chain_id_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-multiple_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-first_valid_then_single_repeated_nonce_authorization]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-first_valid_then_single_repeated_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_authorization_to_eoa]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_authorization_to_contract]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_authorization_with_authority_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_authorization_with_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_authorization_with_authority_and_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_re_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-multiple_valid_authorizations_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_authorization_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-multiple_valid_authorizations_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_authorization_invalid_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-multiple_authorizations_empty_account_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-multiple_authorizations_eoa_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-multiple_authorizations_eoa_self_sponsored_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_authorization_with_single_non_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_authorization_with_single_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-many_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-many_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-first_valid_then_many_duplicate_authorizations]\ntest_self_set_code_cost[fork_Prague-blockchain_test-pre_authorized_True]\ntest_self_set_code_cost[fork_Prague-blockchain_test-pre_authorized_False]\ntest_self_set_code_cost[fork_Prague-blockchain_test_engine-pre_authorized_True]\ntest_self_set_code_cost[fork_Prague-blockchain_test_engine-pre_authorized_False]\ntest_self_set_code_cost[fork_Prague-state_test-pre_authorized_True]\ntest_self_set_code_cost[fork_Prague-state_test-pre_authorized_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/prague/eip7702_set_code_tx/test_gas.py\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/","title":"Test Set Code Txs","text":"Documentation for tests/prague/eip7702_set_code_tx/test_set_code_txs.py
.
Generate fixtures for these test cases for Prague with:
Prague only:
fill -v tests/prague/eip7702_set_code_tx/test_set_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_set_code_tx/test_set_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_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_self_sponsored_set_code","title":"test_self_sponsored_set_code(state_test, pre, suffix, succeeds, tx_value)
","text":"Test the executing a self-sponsored set-code transaction.
The transaction is sent to the sender, and the sender is the signer of the only authorization tuple in the authorization list.
The authorization tuple has a nonce of 1 because the self-sponsored transaction increases the nonce of the sender from zero to one first.
The expected nonce at the end of the transaction is 2.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"tx_value\",\n [0, 1],\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 pytest.param(Om.OOG, False, id=\"out-of-gas\"),\n ],\n)\ndef test_self_sponsored_set_code(\n state_test: StateTestFiller,\n pre: Alloc,\n suffix: Bytecode,\n succeeds: bool,\n tx_value: int,\n):\n \"\"\"\n Test the executing a self-sponsored set-code transaction.\n\n The transaction is sent to the sender, and the sender is the signer of the only authorization\n tuple in the authorization list.\n\n The authorization tuple has a nonce of 1 because the self-sponsored transaction increases the\n nonce of the sender from zero to one first.\n\n The expected nonce at the end of the transaction is 2.\n \"\"\"\n storage = Storage()\n sender = pre.fund_eoa()\n\n set_code = (\n Op.SSTORE(storage.store_next(sender), Op.ORIGIN)\n + Op.SSTORE(storage.store_next(sender), Op.CALLER)\n + Op.SSTORE(storage.store_next(tx_value), Op.CALLVALUE)\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=sender,\n value=tx_value,\n authorization_list=[\n AuthorizationTuple(\n address=set_code_to_address,\n nonce=1,\n signer=sender,\n ),\n ],\n sender=sender,\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 sender: Account(\n nonce=2,\n code=Spec.delegation_designation(set_code_to_address),\n storage=storage if succeeds else {},\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_to_sstore","title":"test_set_code_to_sstore(state_test, pre, suffix, succeeds, tx_value, eoa_balance, self_sponsored)
","text":"Test the executing a simple SSTORE in a set-code transaction.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"eoa_balance,self_sponsored\",\n [\n pytest.param(0, False, id=\"zero_balance_authority\"),\n pytest.param(1, False, id=\"one_wei_balance_authority\"),\n pytest.param(None, True, id=\"self_sponsored_tx\"),\n ],\n)\n@pytest.mark.parametrize(\n \"tx_value\",\n [0, 1],\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(0, 0), False, id=\"revert\"),\n pytest.param(Op.INVALID, False, id=\"invalid\"),\n pytest.param(Om.OOG + Op.STOP, False, id=\"out-of-gas\"),\n ],\n)\ndef test_set_code_to_sstore(\n state_test: StateTestFiller,\n pre: Alloc,\n suffix: Bytecode,\n succeeds: bool,\n tx_value: int,\n eoa_balance: int,\n self_sponsored: bool,\n):\n \"\"\"\n Test the executing a simple SSTORE in a set-code transaction.\n \"\"\"\n storage = Storage()\n if self_sponsored:\n sender = pre.fund_eoa()\n auth_signer = sender\n else:\n auth_signer = pre.fund_eoa(eoa_balance)\n sender = pre.fund_eoa()\n\n set_code = (\n Op.SSTORE(storage.store_next(sender), Op.ORIGIN)\n + Op.SSTORE(storage.store_next(sender), Op.CALLER)\n + Op.SSTORE(storage.store_next(tx_value), Op.CALLVALUE)\n + suffix\n )\n set_code_to_address = pre.deploy_contract(\n set_code,\n )\n\n tx = Transaction(\n gas_limit=500_000,\n to=auth_signer,\n value=tx_value,\n authorization_list=[\n AuthorizationTuple(\n address=set_code_to_address,\n nonce=1 if self_sponsored else 0,\n signer=auth_signer,\n ),\n ],\n sender=sender,\n )\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post={\n set_code_to_address: Account(\n storage={k: 0 for k in storage},\n ),\n auth_signer: Account(\n nonce=2 if self_sponsored else 1,\n code=Spec.delegation_designation(set_code_to_address),\n storage=storage if succeeds else {},\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_to_zero_address","title":"test_set_code_to_zero_address(state_test, pre)
","text":"Test setting the code to the zero address (0x0) in a set-code transaction.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
def test_set_code_to_zero_address(\n state_test: StateTestFiller,\n pre: Alloc,\n):\n \"\"\"\n Test setting the code to the zero address (0x0) in a set-code transaction.\n \"\"\"\n auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n tx = Transaction(\n gas_limit=500_000,\n to=auth_signer,\n authorization_list=[\n AuthorizationTuple(\n address=Address(0),\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(\n nonce=1,\n code=Spec.delegation_designation(Address(0)),\n storage={},\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_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 intests/prague/eip7702_set_code_tx/test_set_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=100_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=100_000,\n to=auth_signer,\n value=0,\n authorization_list=[\n AuthorizationTuple(\n address=set_code_2_address,\n nonce=1,\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=2,\n code=Spec.delegation_designation(set_code_2_address),\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_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_to_tstore_reentry","title":"test_set_code_to_tstore_reentry(state_test, pre, call_opcode, return_opcode, evm_code_type)
","text":"Test the executing a simple TSTORE in a set-code transaction, which also performs a re-entry to TLOAD the value.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"return_opcode\",\n [\n Op.RETURN,\n Op.REVERT,\n ],\n)\n@pytest.mark.with_all_call_opcodes\ndef test_set_code_to_tstore_reentry(\n state_test: StateTestFiller,\n pre: Alloc,\n call_opcode: Op,\n return_opcode: Op,\n evm_code_type: EVMCodeType,\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 evm_code_type=evm_code_type,\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(\n nonce=1,\n code=Spec.delegation_designation(set_code_to_address),\n storage={2: tload_value},\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_to_self_destruct","title":"test_set_code_to_self_destruct(state_test, pre, external_sendall_recipient, balance)
","text":"Test the executing self-destruct opcode in a set-code transaction.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"external_sendall_recipient\",\n [False, True],\n)\n@pytest.mark.parametrize(\n \"balance\",\n [0, 1],\n)\ndef test_set_code_to_self_destruct(\n state_test: StateTestFiller,\n pre: Alloc,\n external_sendall_recipient: bool,\n balance: int,\n):\n \"\"\"\n Test the executing self-destruct opcode in a set-code transaction.\n \"\"\"\n auth_signer = pre.fund_eoa(balance)\n if external_sendall_recipient:\n recipient = pre.fund_eoa(0)\n else:\n recipient = auth_signer\n\n set_code_to_address = pre.deploy_contract(Op.SSTORE(1, 1) + Op.SELFDESTRUCT(recipient))\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 post = {\n auth_signer: Account(\n nonce=1,\n code=Spec.delegation_designation(set_code_to_address),\n storage={1: 1},\n balance=balance if not external_sendall_recipient else 0,\n ),\n }\n\n if external_sendall_recipient and balance > 0:\n post[recipient] = Account(balance=balance)\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post=post,\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_to_contract_creator","title":"test_set_code_to_contract_creator(state_test, pre, create_opcode, evm_code_type)
","text":"Test the executing a contract-creating opcode in a set-code transaction.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.with_all_create_opcodes\ndef test_set_code_to_contract_creator(\n state_test: StateTestFiller,\n pre: Alloc,\n create_opcode: Op,\n evm_code_type: EVMCodeType,\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: Bytecode | Container = Op.STOP\n initcode: Bytecode | Container\n\n if evm_code_type == EVMCodeType.LEGACY:\n initcode = Initcode(deploy_code=deployed_code)\n elif evm_code_type == EVMCodeType.EOF_V1:\n deployed_code = Container.Code(deployed_code)\n initcode = Container.Init(deploy_container=deployed_code)\n else:\n raise ValueError(f\"Unsupported EVM code type: {evm_code_type}\")\n\n salt = 0\n\n deployed_contract_address = compute_create_address(\n address=auth_signer,\n nonce=1,\n salt=salt,\n initcode=initcode,\n opcode=create_opcode,\n )\n\n creator_code: Bytecode | Container\n if evm_code_type == EVMCodeType.LEGACY:\n creator_code = Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE(\n storage.store_next(deployed_contract_address),\n create_opcode(value=0, offset=0, size=Op.CALLDATASIZE, salt=salt),\n )\n elif evm_code_type == EVMCodeType.EOF_V1:\n creator_code = Container(\n sections=[\n Section.Code(\n code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP(),\n ),\n Section.Container(\n container=initcode,\n ),\n ]\n )\n else:\n raise ValueError(f\"Unsupported EVM code type: {evm_code_type}\")\n\n creator_code_address = pre.deploy_contract(creator_code)\n\n tx = Transaction(\n gas_limit=10_000_000,\n to=auth_signer,\n value=0,\n data=initcode if evm_code_type == EVMCodeType.LEGACY else b\"\",\n authorization_list=[\n AuthorizationTuple(\n address=creator_code_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 creator_code_address: Account(storage={}),\n auth_signer: Account(\n nonce=2,\n code=Spec.delegation_designation(creator_code_address),\n storage=storage,\n ),\n deployed_contract_address: Account(\n code=deployed_code,\n storage={},\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_to_self_caller","title":"test_set_code_to_self_caller(state_test, pre, call_opcode, value, evm_code_type)
","text":"Test the executing a self-call in a set-code transaction.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"value\",\n [0, 1],\n)\n@pytest.mark.with_all_call_opcodes\ndef test_set_code_to_self_caller(\n state_test: StateTestFiller,\n pre: Alloc,\n call_opcode: Op,\n value: int,\n evm_code_type: EVMCodeType,\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 static_call = call_opcode in [Op.STATICCALL, Op.EXTSTATICCALL]\n\n first_entry_slot = storage.store_next(True)\n re_entry_success_slot = storage.store_next(not static_call)\n re_entry_call_return_code_slot = storage.store_next(\n call_return_code(opcode=call_opcode, success=not static_call)\n )\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, call_opcode(address=auth_signer, value=value))\n + Op.STOP,\n if_false=Op.SSTORE(re_entry_success_slot, 1) + Op.STOP,\n evm_code_type=evm_code_type,\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(),\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=1,\n code=Spec.delegation_designation(set_code_to_address),\n storage=storage,\n balance=auth_account_start_balance + value,\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_call_set_code","title":"test_set_code_call_set_code(state_test, pre, call_opcode, value)
","text":"Test the calling a set-code account from another set-code account.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.with_all_call_opcodes\n@pytest.mark.parametrize(\n \"value\",\n [0, 1],\n)\ndef test_set_code_call_set_code(\n state_test: StateTestFiller,\n pre: Alloc,\n call_opcode: 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 static_call = call_opcode in [Op.STATICCALL, Op.EXTSTATICCALL]\n\n set_code_1_call_result_slot = storage_1.store_next(\n call_return_code(opcode=call_opcode, success=not static_call)\n )\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(not static_call)\n\n set_code_1 = (\n Op.SSTORE(set_code_1_call_result_slot, call_opcode(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(),\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=1,\n code=Spec.delegation_designation(set_code_to_address_1),\n storage=storage_1\n if call_opcode in [Op.CALL, Op.STATICCALL, Op.EXTCALL, Op.EXTSTATICCALL]\n else storage_1 + storage_2,\n balance=(0 if call_opcode in [Op.CALL, Op.EXTCALL] else value)\n + auth_account_start_balance,\n ),\n auth_signer_2: Account(\n nonce=1,\n code=Spec.delegation_designation(set_code_to_address_2),\n storage=storage_2 if call_opcode in [Op.CALL, Op.EXTCALL] else {},\n balance=(value if call_opcode in [Op.CALL, Op.EXTCALL] else 0)\n + auth_account_start_balance,\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_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 intests/prague/eip7702_set_code_tx/test_set_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(\n nonce=1,\n code=Spec.delegation_designation(set_code_to_address),\n storage=storage,\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_tx_into_self_delegating_set_code","title":"test_tx_into_self_delegating_set_code(state_test, pre)
","text":"Test a transaction that has entry-point into a set-code address that delegates to itself.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
def test_tx_into_self_delegating_set_code(\n state_test: StateTestFiller,\n pre: Alloc,\n):\n \"\"\"\n Test a transaction that has entry-point into a set-code address that delegates to itself.\n \"\"\"\n auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n tx = Transaction(\n gas_limit=10_000_000,\n to=auth_signer,\n value=0,\n authorization_list=[\n AuthorizationTuple(\n address=auth_signer,\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(\n nonce=1,\n code=Spec.delegation_designation(auth_signer),\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_tx_into_chain_delegating_set_code","title":"test_tx_into_chain_delegating_set_code(state_test, pre)
","text":"Test a transaction that has entry-point into a set-code address that delegates to itself.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
def test_tx_into_chain_delegating_set_code(\n state_test: StateTestFiller,\n pre: Alloc,\n):\n \"\"\"\n Test a transaction that has entry-point into a set-code address that delegates to itself.\n \"\"\"\n auth_signer_1 = pre.fund_eoa(auth_account_start_balance)\n auth_signer_2 = pre.fund_eoa(auth_account_start_balance)\n\n tx = Transaction(\n gas_limit=10_000_000,\n to=auth_signer_1,\n value=0,\n authorization_list=[\n AuthorizationTuple(\n address=auth_signer_2,\n nonce=0,\n signer=auth_signer_1,\n ),\n AuthorizationTuple(\n address=auth_signer_1,\n nonce=0,\n signer=auth_signer_2,\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_1: Account(nonce=1, code=Spec.delegation_designation(auth_signer_2)),\n auth_signer_2: Account(nonce=1, code=Spec.delegation_designation(auth_signer_1)),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_call_into_self_delegating_set_code","title":"test_call_into_self_delegating_set_code(state_test, pre, call_opcode)
","text":"Test a transaction that has entry-point into a set-code address that delegates to itself.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.with_all_call_opcodes\ndef test_call_into_self_delegating_set_code(\n state_test: StateTestFiller,\n pre: Alloc,\n call_opcode: Op,\n):\n \"\"\"\n Test a transaction that has entry-point into a set-code address that delegates to itself.\n \"\"\"\n auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n storage = Storage()\n entry_code = (\n Op.SSTORE(\n storage.store_next(call_return_code(opcode=call_opcode, success=False)),\n call_opcode(address=auth_signer),\n )\n + Op.STOP\n )\n entry_address = pre.deploy_contract(entry_code)\n\n tx = Transaction(\n gas_limit=10_000_000,\n to=entry_address,\n value=0,\n authorization_list=[\n AuthorizationTuple(\n address=auth_signer,\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 entry_address: Account(storage=storage),\n auth_signer: Account(nonce=1, code=Spec.delegation_designation(auth_signer)),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_call_into_chain_delegating_set_code","title":"test_call_into_chain_delegating_set_code(state_test, pre, call_opcode)
","text":"Test a transaction that has entry-point into a set-code address that delegates to itself.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.with_all_call_opcodes\ndef test_call_into_chain_delegating_set_code(\n state_test: StateTestFiller,\n pre: Alloc,\n call_opcode: Op,\n):\n \"\"\"\n Test a transaction that has entry-point into a set-code address that delegates to itself.\n \"\"\"\n auth_signer_1 = pre.fund_eoa(auth_account_start_balance)\n auth_signer_2 = pre.fund_eoa(auth_account_start_balance)\n\n storage = Storage()\n entry_code = (\n Op.SSTORE(\n storage.store_next(call_return_code(opcode=call_opcode, success=False)),\n call_opcode(address=auth_signer_1),\n )\n + Op.STOP\n )\n entry_address = pre.deploy_contract(entry_code)\n\n tx = Transaction(\n gas_limit=10_000_000,\n to=entry_address,\n value=0,\n authorization_list=[\n AuthorizationTuple(\n address=auth_signer_2,\n nonce=0,\n signer=auth_signer_1,\n ),\n AuthorizationTuple(\n address=auth_signer_1,\n nonce=0,\n signer=auth_signer_2,\n ),\n ],\n sender=pre.fund_eoa(),\n )\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post={\n entry_address: Account(storage=storage),\n auth_signer_1: Account(nonce=1, code=Spec.delegation_designation(auth_signer_2)),\n auth_signer_2: Account(nonce=1, code=Spec.delegation_designation(auth_signer_1)),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_ext_code_on_set_code","title":"test_ext_code_on_set_code(state_test, pre, balance, set_code_type)
","text":"Test different ext*code operations on a set-code address.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"balance\",\n [0, 1],\n)\n@pytest.mark.parametrize(\n \"set_code_type\",\n list(AddressType),\n ids=lambda address_type: address_type.name,\n)\ndef test_ext_code_on_set_code(\n state_test: StateTestFiller,\n pre: Alloc,\n balance: int,\n set_code_type: AddressType,\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_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_ext_code_size_result, Op.EXTCODESIZE(auth_signer))\n + Op.SSTORE(slot_ext_code_hash_result, Op.EXTCODEHASH(auth_signer))\n + Op.EXTCODECOPY(auth_signer, 0, 0, Op.EXTCODESIZE(auth_signer))\n + Op.SSTORE(slot_ext_code_copy_result, Op.MLOAD(0))\n + Op.SSTORE(slot_ext_balance_result, Op.BALANCE(auth_signer))\n + Op.STOP\n )\n callee_address = pre.deploy_contract(callee_code)\n\n set_code_to_address: Address\n set_code: Bytecode | Bytes\n match set_code_type:\n case AddressType.EMPTY_ACCOUNT:\n set_code = Bytecode()\n set_code_to_address = pre.fund_eoa(0)\n case AddressType.EOA:\n set_code = Bytecode()\n set_code_to_address = pre.fund_eoa(1)\n case AddressType.EOA_WITH_SET_CODE:\n set_code_account = pre.fund_eoa(0)\n set_code = Spec.delegation_designation(set_code_account)\n set_code_to_address = pre.fund_eoa(1, delegation=set_code_account)\n case AddressType.CONTRACT:\n set_code = Op.STOP\n set_code_to_address = pre.deploy_contract(set_code)\n case _:\n raise ValueError(f\"Unsupported set code type: {set_code_type}\")\n\n callee_storage = Storage()\n callee_storage[slot_ext_code_size_result] = len(set_code)\n callee_storage[slot_ext_code_hash_result] = (\n set_code.keccak256() if set_code_type != AddressType.EMPTY_ACCOUNT else 0\n )\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=callee_address,\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.NONEXISTENT\n if set_code_type == AddressType.EMPTY_ACCOUNT\n else Account(storage={}),\n auth_signer: Account(\n nonce=1,\n code=Spec.delegation_designation(set_code_to_address),\n balance=balance,\n ),\n callee_address: Account(storage=callee_storage),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_ext_code_on_self_set_code","title":"test_ext_code_on_self_set_code(state_test, pre, balance)
","text":"Test different ext*code operations on self set-code address.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"balance\",\n [0, 1],\n)\ndef test_ext_code_on_self_set_code(\n state_test: StateTestFiller,\n pre: Alloc,\n balance: int,\n):\n \"\"\"\n Test different ext*code operations on self set-code address.\n \"\"\"\n auth_signer = pre.fund_eoa(balance)\n\n slot = count(1)\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 set_code = (\n Op.SSTORE(slot_ext_code_size_result, Op.EXTCODESIZE(auth_signer))\n + Op.SSTORE(slot_ext_code_hash_result, Op.EXTCODEHASH(auth_signer))\n + Op.EXTCODECOPY(auth_signer, 0, 0, Op.EXTCODESIZE(auth_signer))\n + Op.SSTORE(slot_ext_code_copy_result, Op.MLOAD(0))\n + Op.SSTORE(slot_ext_balance_result, Op.BALANCE(auth_signer))\n + Op.STOP\n )\n set_code_address = pre.deploy_contract(set_code)\n\n set_code_storage = Storage()\n set_code_storage[slot_ext_code_size_result] = len(set_code)\n set_code_storage[slot_ext_code_hash_result] = set_code.keccak256()\n set_code_storage[slot_ext_code_copy_result] = bytes(set_code).ljust(32, b\"\\x00\")[:32]\n set_code_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_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(storage=set_code_storage),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_address_and_authority_warm_state","title":"test_set_code_address_and_authority_warm_state(state_test, pre, call_opcode, set_code_address_first)
","text":"Test set to code address and authority warm status after a call to authority address, or viceversa.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.with_all_call_opcodes(\n selector=(\n lambda opcode: opcode\n not in [Op.STATICCALL, Op.CALLCODE, Op.DELEGATECALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL]\n )\n)\n@pytest.mark.parametrize(\n \"set_code_address_first\",\n [\n pytest.param(True, id=\"call_set_code_address_first_then_authority\"),\n pytest.param(False, id=\"call_authority_first_then_set_code_address\"),\n ],\n)\ndef test_set_code_address_and_authority_warm_state(\n state_test: StateTestFiller,\n pre: Alloc,\n call_opcode: Op,\n set_code_address_first: bool,\n):\n \"\"\"\n Test set to code address and authority warm status after a call to\n authority address, or viceversa.\n \"\"\"\n auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n slot = count(1)\n slot_call_success = next(slot)\n slot_set_code_to_warm_state = next(slot)\n slot_authority_warm_state = next(slot)\n\n set_code = Op.STOP\n set_code_to_address = pre.deploy_contract(set_code)\n\n overhead_cost = 3 * len(call_opcode.kwargs) # type: ignore\n if call_opcode == Op.CALL:\n overhead_cost -= 1 # GAS opcode is less expensive than a PUSH\n\n code_gas_measure_set_code = CodeGasMeasure(\n code=call_opcode(address=set_code_to_address),\n overhead_cost=overhead_cost,\n extra_stack_items=1,\n sstore_key=slot_set_code_to_warm_state,\n stop=False,\n )\n code_gas_measure_authority = CodeGasMeasure(\n code=call_opcode(address=auth_signer),\n overhead_cost=overhead_cost,\n extra_stack_items=1,\n sstore_key=slot_authority_warm_state,\n stop=False,\n )\n\n callee_code = Bytecode()\n if set_code_address_first:\n callee_code += code_gas_measure_set_code + code_gas_measure_authority\n else:\n callee_code += code_gas_measure_authority + code_gas_measure_set_code\n callee_code += Op.SSTORE(slot_call_success, 1) + Op.STOP\n\n callee_address = pre.deploy_contract(callee_code)\n callee_storage = Storage()\n callee_storage[slot_call_success] = 1\n callee_storage[slot_set_code_to_warm_state] = 2_600 if set_code_address_first else 100\n callee_storage[slot_authority_warm_state] = 200 if set_code_address_first else 2_700\n\n tx = Transaction(\n gas_limit=1_000_000,\n to=callee_address,\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 callee_address: Account(storage=callee_storage),\n auth_signer: Account(\n nonce=1,\n code=Spec.delegation_designation(set_code_to_address),\n balance=auth_account_start_balance,\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_ext_code_on_self_delegating_set_code","title":"test_ext_code_on_self_delegating_set_code(state_test, pre, balance)
","text":"Test different ext*code operations on a set-code address that delegates to itself.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"balance\",\n [0, 1],\n)\ndef test_ext_code_on_self_delegating_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 that delegates to itself.\n \"\"\"\n auth_signer = pre.fund_eoa(balance)\n\n slot = count(1)\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_ext_code_size_result, Op.EXTCODESIZE(auth_signer))\n + Op.SSTORE(slot_ext_code_hash_result, Op.EXTCODEHASH(auth_signer))\n + Op.EXTCODECOPY(auth_signer, 0, 0, Op.EXTCODESIZE(auth_signer))\n + Op.SSTORE(slot_ext_code_copy_result, Op.MLOAD(0))\n + Op.SSTORE(slot_ext_balance_result, Op.BALANCE(auth_signer))\n + Op.STOP\n )\n callee_address = pre.deploy_contract(callee_code)\n callee_storage = Storage()\n\n set_code = b\"\\xef\\x01\\x00\" + bytes(auth_signer)\n callee_storage[slot_ext_code_size_result] = len(set_code)\n callee_storage[slot_ext_code_hash_result] = keccak256(set_code)\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=callee_address,\n authorization_list=[\n AuthorizationTuple(\n address=auth_signer,\n nonce=0,\n signer=auth_signer,\n ),\n ],\n sender=pre.fund_eoa(), # TODO: Test with sender as auth_signer\n )\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post={\n auth_signer: Account(\n nonce=1,\n code=Spec.delegation_designation(auth_signer),\n balance=balance,\n ),\n callee_address: Account(storage=callee_storage),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_ext_code_on_chain_delegating_set_code","title":"test_ext_code_on_chain_delegating_set_code(state_test, pre)
","text":"Test different ext*code operations on a set-code address that references another delegated address.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
def test_ext_code_on_chain_delegating_set_code(\n state_test: StateTestFiller,\n pre: Alloc,\n):\n \"\"\"\n Test different ext*code operations on a set-code address that references another delegated\n address.\n \"\"\"\n auth_signer_1_balance = 1\n auth_signer_2_balance = 0\n\n auth_signer_1 = pre.fund_eoa(auth_signer_1_balance)\n auth_signer_2 = pre.fund_eoa(auth_signer_2_balance)\n\n slot = count(1)\n\n slot_ext_code_size_result_1 = next(slot)\n slot_ext_code_hash_result_1 = next(slot)\n slot_ext_code_copy_result_1 = next(slot)\n slot_ext_balance_result_1 = next(slot)\n\n slot_ext_code_size_result_2 = next(slot)\n slot_ext_code_hash_result_2 = next(slot)\n slot_ext_code_copy_result_2 = next(slot)\n slot_ext_balance_result_2 = next(slot)\n\n callee_code = (\n # Address 1\n Op.SSTORE(slot_ext_code_size_result_1, Op.EXTCODESIZE(auth_signer_1))\n + Op.SSTORE(slot_ext_code_hash_result_1, Op.EXTCODEHASH(auth_signer_1))\n + Op.EXTCODECOPY(auth_signer_1, 0, 0, Op.EXTCODESIZE(auth_signer_1))\n + Op.SSTORE(slot_ext_code_copy_result_1, Op.MLOAD(0))\n + Op.SSTORE(slot_ext_balance_result_1, Op.BALANCE(auth_signer_1))\n # Address 2\n + Op.SSTORE(slot_ext_code_size_result_2, Op.EXTCODESIZE(auth_signer_2))\n + Op.SSTORE(slot_ext_code_hash_result_2, Op.EXTCODEHASH(auth_signer_2))\n + Op.EXTCODECOPY(auth_signer_2, 0, 0, Op.EXTCODESIZE(auth_signer_2))\n + Op.SSTORE(slot_ext_code_copy_result_2, Op.MLOAD(0))\n + Op.SSTORE(slot_ext_balance_result_2, Op.BALANCE(auth_signer_2))\n + Op.STOP\n )\n callee_address = pre.deploy_contract(callee_code)\n callee_storage = Storage()\n\n set_code_1 = Spec.delegation_designation(auth_signer_2)\n set_code_2 = Spec.delegation_designation(auth_signer_1)\n\n callee_storage[slot_ext_code_size_result_1] = len(set_code_2)\n callee_storage[slot_ext_code_hash_result_1] = keccak256(set_code_2)\n callee_storage[slot_ext_code_copy_result_1] = bytes(set_code_2).ljust(32, b\"\\x00\")[:32]\n callee_storage[slot_ext_balance_result_1] = auth_signer_1_balance\n\n callee_storage[slot_ext_code_size_result_2] = len(set_code_1)\n callee_storage[slot_ext_code_hash_result_2] = keccak256(set_code_1)\n callee_storage[slot_ext_code_copy_result_2] = bytes(set_code_1).ljust(32, b\"\\x00\")[:32]\n callee_storage[slot_ext_balance_result_2] = auth_signer_2_balance\n\n tx = Transaction(\n gas_limit=10_000_000,\n to=callee_address,\n authorization_list=[\n AuthorizationTuple(\n address=auth_signer_2,\n nonce=0,\n signer=auth_signer_1,\n ),\n AuthorizationTuple(\n address=auth_signer_1,\n nonce=0,\n signer=auth_signer_2,\n ),\n ],\n sender=pre.fund_eoa(), # TODO: Test with sender as auth_signer\n )\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post={\n auth_signer_1: Account(\n nonce=1,\n code=Spec.delegation_designation(auth_signer_2),\n balance=auth_signer_1_balance,\n ),\n auth_signer_2: Account(\n nonce=1,\n code=Spec.delegation_designation(auth_signer_1),\n balance=auth_signer_2_balance,\n ),\n callee_address: Account(storage=callee_storage),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_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 intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"balance\",\n [0, 1],\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(\n nonce=1,\n code=Spec.delegation_designation(set_code_to_address),\n storage=storage,\n balance=balance,\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_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_opcode, evm_code_type)
","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 intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.with_all_create_opcodes\ndef test_set_code_to_account_deployed_in_same_tx(\n state_test: StateTestFiller,\n pre: Alloc,\n create_opcode: Op,\n evm_code_type: EVMCodeType,\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: Bytecode | Container = Op.SSTORE(success_slot, 1) + Op.STOP\n initcode: Bytecode | Container\n\n if evm_code_type == EVMCodeType.LEGACY:\n initcode = Initcode(deploy_code=deployed_code)\n elif evm_code_type == EVMCodeType.EOF_V1:\n deployed_code = Container.Code(deployed_code)\n initcode = Container.Init(deploy_container=deployed_code)\n else:\n raise ValueError(f\"Unsupported EVM code type: {evm_code_type}\")\n\n deployed_contract_address_slot = 1\n signer_call_return_code_slot = 2\n deployed_contract_call_return_code_slot = 3\n\n salt = 0\n call_opcode = Op.CALL if evm_code_type == EVMCodeType.LEGACY else Op.EXTCALL\n\n if create_opcode == Op.EOFCREATE:\n create_opcode = Op.EOFCREATE[0] # type: ignore\n\n contract_creator_code: Bytecode | Container = (\n Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) # NOOP on EOF\n + Op.SSTORE(\n deployed_contract_address_slot,\n create_opcode(offset=0, salt=salt, size=Op.CALLDATASIZE),\n )\n + Op.SSTORE(signer_call_return_code_slot, call_opcode(address=auth_signer))\n + Op.SSTORE(\n deployed_contract_call_return_code_slot,\n call_opcode(address=Op.SLOAD(deployed_contract_address_slot)),\n )\n + Op.STOP()\n )\n\n if evm_code_type == EVMCodeType.EOF_V1:\n contract_creator_code = Container(\n sections=[\n Section.Code(contract_creator_code),\n Section.Container(container=initcode),\n ],\n )\n\n contract_creator_address = pre.deploy_contract(contract_creator_code)\n\n deployed_contract_address = compute_create_address(\n address=contract_creator_address,\n nonce=1,\n salt=salt,\n initcode=initcode,\n opcode=create_opcode,\n )\n\n tx = Transaction(\n gas_limit=10_000_000,\n to=contract_creator_address,\n value=0,\n data=initcode if evm_code_type == EVMCodeType.LEGACY else b\"\",\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=1,\n code=Spec.delegation_designation(deployed_contract_address),\n storage={success_slot: 1},\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_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_to_self_destructing_account_deployed_in_same_tx","title":"test_set_code_to_self_destructing_account_deployed_in_same_tx(state_test, pre, create_opcode, call_set_code_first, external_sendall_recipient, balance)
","text":"Test setting the code of an account to an account that contains the SELFDESTRUCT opcode and was deployed in the same transaction, and test calling the set-code address and the deployed in both sequence orders.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"external_sendall_recipient\",\n [False, True],\n)\n@pytest.mark.parametrize(\n \"balance\",\n [0, 1],\n)\n@pytest.mark.parametrize(\"call_set_code_first\", [False, True])\n@pytest.mark.parametrize(\n \"create_opcode\", [Op.CREATE, Op.CREATE2]\n) # EOF code does not support SELFDESTRUCT\ndef test_set_code_to_self_destructing_account_deployed_in_same_tx(\n state_test: StateTestFiller,\n pre: Alloc,\n create_opcode: Op,\n call_set_code_first: bool,\n external_sendall_recipient: bool,\n balance: int,\n):\n \"\"\"\n Test setting the code of an account to an account that contains the SELFDESTRUCT opcode and\n was deployed in the same transaction, and test calling the set-code address and the deployed\n in both sequence orders.\n \"\"\"\n auth_signer = pre.fund_eoa(balance)\n if external_sendall_recipient:\n recipient = pre.fund_eoa(0)\n else:\n recipient = auth_signer\n\n success_slot = 1\n\n deployed_code = Op.SSTORE(success_slot, 1) + Op.SELFDESTRUCT(recipient)\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 salt = 0\n call_opcode = Op.CALL\n\n contract_creator_code: Bytecode = Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE(\n deployed_contract_address_slot,\n create_opcode(offset=0, salt=salt, size=Op.CALLDATASIZE),\n )\n if call_set_code_first:\n contract_creator_code += Op.SSTORE(\n signer_call_return_code_slot, call_opcode(address=auth_signer)\n ) + Op.SSTORE(\n deployed_contract_call_return_code_slot,\n call_opcode(address=Op.SLOAD(deployed_contract_address_slot)),\n )\n else:\n contract_creator_code += Op.SSTORE(\n deployed_contract_call_return_code_slot,\n call_opcode(address=Op.SLOAD(deployed_contract_address_slot)),\n ) + Op.SSTORE(signer_call_return_code_slot, call_opcode(address=auth_signer))\n\n contract_creator_code += Op.STOP\n\n contract_creator_address = pre.deploy_contract(contract_creator_code)\n\n deployed_contract_address = compute_create_address(\n address=contract_creator_address,\n nonce=1,\n salt=salt,\n initcode=initcode,\n opcode=create_opcode,\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 post = {\n deployed_contract_address: Account.NONEXISTENT,\n auth_signer: Account(\n nonce=1,\n code=Spec.delegation_designation(deployed_contract_address),\n storage={success_slot: 1},\n balance=balance if not external_sendall_recipient else 0,\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 if external_sendall_recipient and balance > 0:\n post[recipient] = Account(balance=balance)\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post=post,\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_multiple_first_valid_authorization_tuples_same_signer","title":"test_set_code_multiple_first_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 intests/prague/eip7702_set_code_tx/test_set_code_txs.py
def test_set_code_multiple_first_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 tuple_count = 10\n\n success_slot = 0\n\n addresses = [pre.deploy_contract(Op.SSTORE(i, 1) + Op.STOP) for i in range(tuple_count)]\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=1,\n code=Spec.delegation_designation(addresses[0]),\n storage={\n success_slot: 1,\n },\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce","title":"test_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce(state_test, pre)
","text":"Test setting the code of an account with multiple authorization tuples from the same signer and each authorization tuple has an increasing nonce, therefore the last tuple is executed.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
def test_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce(\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 and each authorization tuple has an increasing nonce, therefore the last tuple is executed.\n \"\"\"\n auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n tuple_count = 10\n\n success_slot = tuple_count - 1\n\n addresses = [pre.deploy_contract(Op.SSTORE(i, 1) + Op.STOP) for i in range(tuple_count)]\n\n tx = Transaction(\n gas_limit=10_000_000, # TODO: Reduce gas limit of all tests\n to=auth_signer,\n value=0,\n authorization_list=[\n AuthorizationTuple(\n address=address,\n nonce=i,\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=10,\n code=Spec.delegation_designation(addresses[success_slot]),\n storage={\n success_slot: 1,\n },\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce_self_sponsored","title":"test_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce_self_sponsored(state_test, pre)
","text":"Test setting the code of an account with multiple authorization tuples from the same signer and each authorization tuple has an increasing nonce, therefore the last tuple is executed, and the transaction is self-sponsored.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
def test_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce_self_sponsored(\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 and each authorization tuple has an increasing nonce, therefore the last tuple is executed,\n and the transaction is self-sponsored.\n \"\"\"\n auth_signer = pre.fund_eoa()\n\n tuple_count = 10\n\n success_slot = tuple_count - 1\n\n addresses = [pre.deploy_contract(Op.SSTORE(i, 1) + Op.STOP) for i in range(tuple_count)]\n\n tx = Transaction(\n gas_limit=10_000_000, # TODO: Reduce gas limit of all tests\n to=auth_signer,\n value=0,\n authorization_list=[\n AuthorizationTuple(\n address=address,\n nonce=i + 1,\n signer=auth_signer,\n )\n for i, address in enumerate(addresses)\n ],\n sender=auth_signer,\n )\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post={\n auth_signer: Account(\n nonce=11,\n code=Spec.delegation_designation(addresses[success_slot]),\n storage={\n success_slot: 1,\n },\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_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 intests/prague/eip7702_set_code_tx/test_set_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 = [pre.deploy_contract(Op.SSTORE(i, 1) + Op.STOP) for i in range(tuple_count)]\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=1,\n code=Spec.delegation_designation(addresses[1]),\n storage={\n success_slot: 1,\n },\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_all_invalid_authorization_tuples","title":"test_set_code_all_invalid_authorization_tuples(state_test, pre)
","text":"Test setting the code of an account with multiple authorization tuples from the same signer and all of them are invalid.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
def test_set_code_all_invalid_authorization_tuples(\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 and all of them are invalid.\n \"\"\"\n auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n tuple_count = 10\n\n addresses = [pre.deploy_contract(Op.SSTORE(i, 1) + Op.STOP) for i in range(tuple_count)]\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,\n signer=auth_signer,\n )\n for _, 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.NONEXISTENT,\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_invalid_authorization_tuple","title":"test_set_code_invalid_authorization_tuple(state_test, pre, invalidity_reason, transaction_exception)
","text":"Test attempting to set the code of an account with invalid authorization tuple.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"invalidity_reason,transaction_exception\",\n [\n pytest.param(\n InvalidityReason.NONCE,\n None, # Transaction is valid and accepted, but no authorization tuple is processed\n ),\n pytest.param(\n InvalidityReason.MULTIPLE_NONCE,\n None,\n marks=pytest.mark.xfail(reason=\"test issue\"),\n ),\n pytest.param(\n InvalidityReason.CHAIN_ID,\n None, # Transaction is valid and accepted, but no authorization tuple is processed\n ),\n pytest.param(\n InvalidityReason.EMPTY_AUTHORIZATION_LIST,\n TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST,\n ),\n ],\n)\ndef test_set_code_invalid_authorization_tuple(\n state_test: StateTestFiller,\n pre: Alloc,\n invalidity_reason: InvalidityReason,\n transaction_exception: TransactionException | None,\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 authorization_list: List[AuthorizationTuple] = []\n\n if invalidity_reason != InvalidityReason.EMPTY_AUTHORIZATION_LIST:\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\n tx = Transaction(\n gas_limit=10_000_000,\n to=auth_signer,\n value=0,\n authorization_list=authorization_list,\n error=transaction_exception,\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.NONEXISTENT,\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_using_chain_specific_id","title":"test_set_code_using_chain_specific_id(state_test, pre)
","text":"Test sending a transaction to set the code of an account using a chain-specific ID.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
def test_set_code_using_chain_specific_id(\n state_test: StateTestFiller,\n pre: Alloc,\n):\n \"\"\"\n Test sending a transaction to set the code of an account using a chain-specific ID.\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=100_000,\n to=auth_signer,\n value=0,\n authorization_list=[\n AuthorizationTuple(\n address=set_code_to_address,\n nonce=0,\n chain_id=1,\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=1,\n code=Spec.delegation_designation(set_code_to_address),\n storage={\n success_slot: 1,\n },\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_using_valid_synthetic_signatures","title":"test_set_code_using_valid_synthetic_signatures(state_test, pre, v, r, s)
","text":"Test sending a transaction to set the code of an account using synthetic signatures.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"v,r,s\",\n [\n pytest.param(0, 1, 1, id=\"v=0,r=1,s=1\"),\n pytest.param(1, 1, 1, id=\"v=1,r=1,s=1\"),\n pytest.param(\n 2, 1, 1, id=\"v=2,r=1,s=1\", marks=pytest.mark.xfail(reason=\"invalid signature\")\n ),\n pytest.param(\n 1, 0, 1, id=\"v=1,r=0,s=1\", marks=pytest.mark.xfail(reason=\"invalid signature\")\n ),\n pytest.param(\n 1, 1, 0, id=\"v=1,r=1,s=0\", marks=pytest.mark.xfail(reason=\"invalid signature\")\n ),\n pytest.param(\n 0,\n SECP256K1N - 0,\n 1,\n id=\"v=0,r=SECP256K1N,s=1\",\n marks=pytest.mark.xfail(reason=\"invalid signature\"),\n ),\n pytest.param(\n 0,\n SECP256K1N - 1,\n 1,\n id=\"v=0,r=SECP256K1N-1,s=1\",\n marks=pytest.mark.xfail(reason=\"invalid signature\"),\n ),\n pytest.param(0, SECP256K1N - 2, 1, id=\"v=0,r=SECP256K1N-2,s=1\"),\n pytest.param(1, SECP256K1N - 2, 1, id=\"v=1,r=SECP256K1N-2,s=1\"),\n pytest.param(0, 1, SECP256K1N_OVER_2, id=\"v=0,r=1,s=SECP256K1N_OVER_2\"),\n pytest.param(1, 1, SECP256K1N_OVER_2, id=\"v=1,r=1,s=SECP256K1N_OVER_2\"),\n pytest.param(\n 0,\n 1,\n SECP256K1N_OVER_2 + 1,\n id=\"v=0,r=1,s=SECP256K1N_OVER_2+1\",\n marks=pytest.mark.xfail(reason=\"invalid signature\"),\n ),\n ],\n)\ndef test_set_code_using_valid_synthetic_signatures(\n state_test: StateTestFiller,\n pre: Alloc,\n v: int,\n r: int,\n s: int,\n):\n \"\"\"\n Test sending a transaction to set the code of an account using synthetic signatures.\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 authorization_tuple = AuthorizationTuple(\n address=set_code_to_address,\n nonce=0,\n chain_id=1,\n v=v,\n r=r,\n s=s,\n )\n\n auth_signer = authorization_tuple.signer\n\n tx = Transaction(\n gas_limit=100_000,\n to=auth_signer,\n value=0,\n authorization_list=[authorization_tuple],\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=1,\n code=Spec.delegation_designation(set_code_to_address),\n storage={\n success_slot: 1,\n },\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_invalid_tx_invalid_auth_signature","title":"test_invalid_tx_invalid_auth_signature(state_test, pre, v, r, s)
","text":"Test sending a transaction to set the code of an account using synthetic signatures.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"v,r,s\",\n [\n pytest.param(2, 1, 1, id=\"v_2,r_1,s_1\"),\n pytest.param(\n 0,\n 1,\n SECP256K1N_OVER_2 + 1,\n id=\"v_0,r_1,s_SECP256K1N_OVER_2+1\",\n ),\n pytest.param(\n 2**256 - 1,\n 1,\n 1,\n id=\"v_2**256-1,r_1,s_1\",\n ),\n pytest.param(\n 0,\n 1,\n 2**256 - 1,\n id=\"v_0,r_1,s_2**256-1\",\n ),\n ],\n)\ndef test_invalid_tx_invalid_auth_signature(\n state_test: StateTestFiller,\n pre: Alloc,\n v: int,\n r: int,\n s: int,\n):\n \"\"\"\n Test sending a transaction to set the code of an account using synthetic signatures.\n \"\"\"\n success_slot = 1\n\n callee_code = Op.SSTORE(success_slot, 1) + Op.STOP\n callee_address = pre.deploy_contract(callee_code)\n\n authorization_tuple = AuthorizationTuple(\n address=0,\n nonce=0,\n chain_id=1,\n v=v,\n r=r,\n s=s,\n )\n\n tx = Transaction(\n gas_limit=100_000,\n to=callee_address,\n value=0,\n authorization_list=[authorization_tuple],\n error=TransactionException.TYPE_4_INVALID_AUTHORITY_SIGNATURE,\n sender=pre.fund_eoa(),\n )\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post={\n callee_address: Account(\n storage={success_slot: 0},\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_using_invalid_signatures","title":"test_set_code_using_invalid_signatures(state_test, pre, v, r, s)
","text":"Test sending a transaction to set the code of an account using synthetic signatures, the transaction is valid but the authorization should not go through.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"v,r,s\",\n [\n pytest.param(1, 0, 1, id=\"v_1,r_0,s_1\"),\n pytest.param(1, 1, 0, id=\"v_1,r_1,s_0\"),\n pytest.param(\n 0,\n SECP256K1N,\n 1,\n id=\"v_0,r_SECP256K1N,s_1\",\n ),\n pytest.param(\n 0,\n SECP256K1N - 1,\n 1,\n id=\"v_0,r_SECP256K1N-1,s_1\",\n ),\n pytest.param(\n 0,\n 1,\n SECP256K1N_OVER_2,\n id=\"v_0,r_1,s_SECP256K1N_OVER_2\",\n ),\n pytest.param(\n 0,\n 1,\n SECP256K1N_OVER_2 - 1,\n id=\"v_0,r_1,s_SECP256K1N_OVER_2_minus_one\",\n ),\n pytest.param(\n 1,\n 2**256 - 1,\n 1,\n id=\"v_1,r_2**256-1,s_1\",\n ),\n ],\n)\ndef test_set_code_using_invalid_signatures(\n state_test: StateTestFiller,\n pre: Alloc,\n v: int,\n r: int,\n s: int,\n):\n \"\"\"\n Test sending a transaction to set the code of an account using synthetic signatures,\n the transaction is valid but the authorization should not go through.\n \"\"\"\n success_slot = 1\n\n callee_code = Op.SSTORE(success_slot, 1) + Op.STOP\n callee_address = pre.deploy_contract(callee_code)\n\n authorization_tuple = AuthorizationTuple(\n address=0,\n nonce=0,\n chain_id=1,\n v=v,\n r=r,\n s=s,\n )\n\n tx = Transaction(\n gas_limit=100_000,\n to=callee_address,\n value=0,\n authorization_list=[authorization_tuple],\n sender=pre.fund_eoa(),\n )\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post={\n callee_address: Account(\n storage={success_slot: 1},\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_to_log","title":"test_set_code_to_log(state_test, pre, log_opcode)
","text":"Test setting the code of an account to a contract that performs the log operation.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"log_opcode\",\n [\n Op.LOG0,\n Op.LOG1,\n Op.LOG2,\n Op.LOG3,\n Op.LOG4,\n ],\n)\n@pytest.mark.with_all_evm_code_types\ndef test_set_code_to_log(\n state_test: StateTestFiller,\n pre: Alloc,\n log_opcode: Op,\n):\n \"\"\"\n Test setting the code of an account to a contract that performs the log operation.\n \"\"\"\n sender = pre.fund_eoa()\n\n set_to_code = (\n Op.MSTORE(0, 0x1234)\n + log_opcode(size=32, topic_1=1, topic_2=2, topic_3=3, topic_4=4)\n + Op.STOP\n )\n set_to_address = pre.deploy_contract(set_to_code)\n\n tx = Transaction(\n gas_limit=10_000_000,\n to=sender,\n value=0,\n authorization_list=[\n AuthorizationTuple(\n address=set_to_address,\n nonce=1,\n signer=sender,\n ),\n ],\n sender=sender,\n )\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post={\n sender: Account(\n nonce=2,\n code=Spec.delegation_designation(set_to_address),\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_to_precompile","title":"test_set_code_to_precompile(state_test, pre, precompile, call_opcode)
","text":"Test setting the code of an account to a pre-compile address.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.with_all_call_opcodes(\n selector=(\n lambda opcode: opcode\n not in [Op.STATICCALL, Op.CALLCODE, Op.DELEGATECALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL]\n )\n)\n@pytest.mark.with_all_precompiles\ndef test_set_code_to_precompile(\n state_test: StateTestFiller,\n pre: Alloc,\n precompile: int,\n call_opcode: Op,\n):\n \"\"\"\n Test setting the code of an account to a pre-compile address.\n \"\"\"\n auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n caller_code_storage = Storage()\n caller_code = (\n Op.SSTORE(\n caller_code_storage.store_next(call_return_code(opcode=call_opcode, success=True)),\n call_opcode(address=auth_signer),\n )\n + Op.SSTORE(caller_code_storage.store_next(0), Op.RETURNDATASIZE)\n + Op.STOP\n )\n caller_code_address = pre.deploy_contract(caller_code)\n\n tx = Transaction(\n sender=pre.fund_eoa(),\n gas_limit=500_000,\n to=caller_code_address,\n authorization_list=[\n AuthorizationTuple(\n address=Address(precompile),\n nonce=0,\n signer=auth_signer,\n ),\n ],\n )\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post={\n auth_signer: Account(\n nonce=1,\n code=Spec.delegation_designation(Address(precompile)),\n ),\n caller_code_address: Account(\n storage=caller_code_storage,\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_to_system_contract","title":"test_set_code_to_system_contract(blockchain_test, pre, system_contract, call_opcode)
","text":"Test setting the code of an account to a pre-compile address.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.with_all_call_opcodes(\n selector=(\n lambda opcode: opcode\n not in [Op.STATICCALL, Op.CALLCODE, Op.DELEGATECALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL]\n )\n)\n@pytest.mark.with_all_system_contracts\ndef test_set_code_to_system_contract(\n blockchain_test: BlockchainTestFiller,\n pre: Alloc,\n system_contract: int,\n call_opcode: Op,\n):\n \"\"\"\n Test setting the code of an account to a pre-compile address.\n \"\"\"\n caller_code_storage = Storage()\n call_return_code_slot = caller_code_storage.store_next(\n call_return_code(\n opcode=call_opcode,\n success=True,\n )\n )\n call_return_data_size_slot = caller_code_storage.store_next(0)\n\n call_value = 0\n\n # Setup the initial storage of the account to mimic the system contract if required\n match system_contract:\n case Address(0x00000000219AB540356CBB839CBE05303D7705FA): # EIP-6110\n # Deposit contract needs specific storage values, so we set them on the account\n auth_signer = pre.fund_eoa(\n auth_account_start_balance, storage=deposit_contract_initial_storage()\n )\n case Address(0x000F3DF6D732807EF1319FB7B8BB8522D0BEAC02): # EIP-4788\n auth_signer = pre.fund_eoa(auth_account_start_balance, storage=Storage({1: 1}))\n case _:\n # Pre-fund without storage\n auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n # Fabricate the payload for the system contract\n match system_contract:\n case Address(0x000F3DF6D732807EF1319FB7B8BB8522D0BEAC02): # EIP-4788\n caller_payload = Hash(1)\n caller_code_storage[call_return_data_size_slot] = 32\n case Address(0x00000000219AB540356CBB839CBE05303D7705FA): # EIP-6110\n # Fabricate a valid deposit request to the set-code account\n deposit_request = DepositRequest(\n pubkey=0x01,\n withdrawal_credentials=0x02,\n amount=1_000_000_000,\n signature=0x03,\n index=0x0,\n )\n caller_payload = deposit_request.calldata\n call_value = deposit_request.value\n case Address(0x00A3CA265EBCB825B45F985A16CEFB49958CE017): # EIP-7002\n # Fabricate a valid withdrawal request to the set-code account\n withdrawal_request = WithdrawalRequest(\n source_address=0x01,\n validator_pubkey=0x02,\n amount=0x03,\n fee=0x01,\n )\n caller_payload = withdrawal_request.calldata\n call_value = withdrawal_request.value\n case Address(0x00B42DBF2194E931E80326D950320F7D9DBEAC02): # EIP-7251\n # Fabricate a valid consolidation request to the set-code account\n consolidation_request = ConsolidationRequest(\n source_address=0x01,\n source_pubkey=0x02,\n target_pubkey=0x03,\n fee=0x01,\n )\n caller_payload = consolidation_request.calldata\n call_value = consolidation_request.value\n case Address(0x0AAE40965E6800CD9B1F4B05FF21581047E3F91E): # EIP-2935\n caller_payload = Hash(0)\n caller_code_storage[call_return_data_size_slot] = 32\n case _:\n raise ValueError(f\"Not implemented system contract: {system_contract}\")\n\n caller_code = (\n Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n + Op.SSTORE(\n call_return_code_slot,\n call_opcode(address=auth_signer, value=call_value, args_size=Op.CALLDATASIZE),\n )\n + Op.SSTORE(call_return_data_size_slot, Op.RETURNDATASIZE)\n + Op.STOP\n )\n caller_code_address = pre.deploy_contract(caller_code)\n\n txs = [\n Transaction(\n sender=pre.fund_eoa(),\n gas_limit=500_000,\n to=caller_code_address,\n value=call_value,\n data=caller_payload,\n authorization_list=[\n AuthorizationTuple(\n address=Address(system_contract),\n nonce=auth_signer.nonce,\n signer=auth_signer,\n ),\n ],\n )\n ]\n\n blockchain_test(\n pre=pre,\n blocks=[\n Block(\n txs=txs,\n requests_root=[], # Verify nothing slipped into the requests trie\n )\n ],\n post={\n auth_signer: Account(\n nonce=auth_signer.nonce + 1,\n code=Spec.delegation_designation(Address(system_contract)),\n ),\n caller_code_address: Account(\n storage=caller_code_storage,\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_eoa_tx_after_set_code","title":"test_eoa_tx_after_set_code(blockchain_test, pre, tx_type, evm_code_type)
","text":"Test sending a transaction from an EOA after code has been set to the account.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.with_all_evm_code_types\n@pytest.mark.with_all_tx_types(selector=lambda tx_type: tx_type != 4)\ndef test_eoa_tx_after_set_code(\n blockchain_test: BlockchainTestFiller,\n pre: Alloc,\n tx_type: int,\n evm_code_type: EVMCodeType,\n):\n \"\"\"\n Test sending a transaction from an EOA after code has been set to the account.\n \"\"\"\n auth_signer = pre.fund_eoa()\n\n set_code = Op.SSTORE(1, Op.ADD(Op.SLOAD(1), 1)) + Op.STOP\n set_code_to_address = pre.deploy_contract(set_code)\n\n txs = [\n Transaction(\n sender=pre.fund_eoa(),\n gas_limit=500_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 )\n ]\n auth_signer.nonce += 1 # type: ignore\n\n match tx_type:\n case 0:\n txs.append(\n Transaction(\n type=tx_type,\n sender=auth_signer,\n gas_limit=500_000,\n to=auth_signer,\n value=0,\n protected=True,\n ),\n )\n txs.append(\n Transaction(\n type=tx_type,\n sender=auth_signer,\n gas_limit=500_000,\n to=auth_signer,\n value=0,\n protected=False,\n ),\n )\n case 1:\n txs.append(\n Transaction(\n type=tx_type,\n sender=auth_signer,\n gas_limit=500_000,\n to=auth_signer,\n value=0,\n access_list=[\n AccessList(\n address=auth_signer,\n storage_keys=[1],\n )\n ],\n ),\n )\n case 2:\n txs.append(\n Transaction(\n type=tx_type,\n sender=auth_signer,\n gas_limit=500_000,\n to=auth_signer,\n value=0,\n max_fee_per_gas=1_000,\n max_priority_fee_per_gas=1_000,\n ),\n )\n case 3:\n txs.append(\n Transaction(\n type=tx_type,\n sender=auth_signer,\n gas_limit=500_000,\n to=auth_signer,\n value=0,\n max_fee_per_gas=1_000,\n max_priority_fee_per_gas=1_000,\n max_fee_per_blob_gas=1_000,\n blob_versioned_hashes=add_kzg_version(\n [Hash(1)],\n Spec4844.BLOB_COMMITMENT_VERSION_KZG,\n ),\n ),\n )\n case _:\n raise ValueError(f\"Unsupported tx type: {tx_type}, test needs update\")\n\n blockchain_test(\n pre=pre,\n blocks=[Block(txs=txs)],\n post={\n auth_signer: Account(\n nonce=3 if tx_type == 0 else 2,\n code=Spec.delegation_designation(set_code_to_address),\n storage={1: 3 if tx_type == 0 else 2},\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_reset_code","title":"test_reset_code(blockchain_test, pre, self_sponsored)
","text":"Test sending type-4 tx to reset the code of an account after code has been set to the account.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"self_sponsored\",\n [\n pytest.param(False, id=\"not_self_sponsored\"),\n pytest.param(True, id=\"self_sponsored\"),\n ],\n)\ndef test_reset_code(\n blockchain_test: BlockchainTestFiller,\n pre: Alloc,\n self_sponsored: bool,\n):\n \"\"\"\n Test sending type-4 tx to reset the code of an account after code has been set to the account.\n \"\"\"\n auth_signer = pre.fund_eoa()\n\n set_code_1 = Op.SSTORE(1, Op.ADD(Op.SLOAD(1), 1)) + Op.STOP\n set_code_1_address = pre.deploy_contract(set_code_1)\n\n set_code_2 = Op.SSTORE(2, Op.ADD(Op.SLOAD(2), 1)) + Op.STOP\n set_code_2_address = pre.deploy_contract(set_code_2)\n\n sender = pre.fund_eoa()\n\n txs = [\n Transaction(\n sender=sender,\n gas_limit=500_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 )\n ]\n\n auth_signer.nonce += 1 # type: ignore\n\n if self_sponsored:\n sender = auth_signer\n\n txs.append(\n Transaction(\n sender=sender,\n gas_limit=500_000,\n to=auth_signer,\n value=0,\n authorization_list=[\n AuthorizationTuple(\n address=set_code_2_address,\n nonce=auth_signer.nonce + 1 if self_sponsored else auth_signer.nonce,\n signer=auth_signer,\n ),\n ],\n ),\n )\n\n blockchain_test(\n pre=pre,\n blocks=[Block(txs=txs)],\n post={\n auth_signer: Account(\n nonce=3 if self_sponsored else 2,\n code=Spec.delegation_designation(set_code_2_address),\n storage={1: 1, 2: 1},\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/index/test_cases/","title":"Test Set Code Txs - Test Cases","text":"Test cases generated from tests/prague/eip7702_set_code_tx/test_set_code_txs.py
Parametrized test cases generated from the test module tests/prague/eip7702_set_code_tx/test_set_code_txs.py
:
test_self_sponsored_set_code[fork_Prague-blockchain_test-stop-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test-stop-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test-return-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test-return-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test-revert-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test-revert-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test-invalid-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test-invalid-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test-out-of-gas-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test-out-of-gas-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test_engine-stop-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test_engine-stop-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test_engine-return-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test_engine-return-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test_engine-revert-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test_engine-revert-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test_engine-invalid-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test_engine-invalid-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test_engine-out-of-gas-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test_engine-out-of-gas-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-state_test-stop-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-state_test-stop-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-state_test-return-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-state_test-return-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-state_test-revert-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-state_test-revert-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-state_test-invalid-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-state_test-invalid-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-state_test-out-of-gas-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-state_test-out-of-gas-tx_value_1]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-stop-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-stop-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-stop-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-stop-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-stop-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-stop-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-return-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-return-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-return-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-return-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-return-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-return-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-revert-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-revert-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-revert-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-revert-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-revert-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-revert-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-invalid-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-invalid-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-invalid-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-invalid-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-invalid-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-invalid-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-out-of-gas-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-out-of-gas-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-out-of-gas-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-out-of-gas-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-out-of-gas-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-out-of-gas-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-stop-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-stop-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-stop-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-stop-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-stop-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-stop-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-return-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-return-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-return-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-return-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-return-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-return-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-revert-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-revert-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-revert-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-revert-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-revert-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-revert-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-invalid-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-invalid-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-invalid-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-invalid-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-invalid-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-invalid-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-out-of-gas-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-out-of-gas-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-out-of-gas-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-out-of-gas-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-out-of-gas-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-out-of-gas-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-state_test-stop-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-stop-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-stop-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-state_test-stop-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-stop-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-stop-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-state_test-return-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-return-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-return-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-state_test-return-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-return-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-return-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-state_test-revert-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-revert-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-revert-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-state_test-revert-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-revert-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-revert-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-state_test-invalid-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-invalid-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-invalid-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-state_test-invalid-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-invalid-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-invalid-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-state_test-out-of-gas-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-out-of-gas-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-out-of-gas-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-state_test-out-of-gas-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-out-of-gas-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-out-of-gas-tx_value_1-self_sponsored_tx]\ntest_set_code_to_zero_address[fork_Prague-blockchain_test]\ntest_set_code_to_zero_address[fork_Prague-blockchain_test_engine]\ntest_set_code_to_zero_address[fork_Prague-state_test]\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-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test-return_opcode_REVERT]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine-return_opcode_REVERT]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test-return_opcode_REVERT]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test-return_opcode_REVERT]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine-return_opcode_REVERT]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test-return_opcode_REVERT]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test-return_opcode_REVERT]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine-return_opcode_REVERT]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test-return_opcode_REVERT]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test-return_opcode_REVERT]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine-return_opcode_REVERT]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test-return_opcode_REVERT]\ntest_set_code_to_self_destruct[fork_Prague-blockchain_test-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destruct[fork_Prague-blockchain_test-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destruct[fork_Prague-blockchain_test-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destruct[fork_Prague-blockchain_test-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destruct[fork_Prague-blockchain_test_engine-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destruct[fork_Prague-blockchain_test_engine-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destruct[fork_Prague-blockchain_test_engine-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destruct[fork_Prague-blockchain_test_engine-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destruct[fork_Prague-state_test-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destruct[fork_Prague-state_test-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destruct[fork_Prague-state_test-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destruct[fork_Prague-state_test-balance_1-external_sendall_recipient_True]\ntest_set_code_to_contract_creator[fork_Prague-create_opcode_CREATE2-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_contract_creator[fork_Prague-create_opcode_CREATE2-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_contract_creator[fork_Prague-create_opcode_CREATE2-evm_code_type_LEGACY-state_test]\ntest_set_code_to_contract_creator[fork_Prague-create_opcode_CREATE-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_contract_creator[fork_Prague-create_opcode_CREATE-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_contract_creator[fork_Prague-create_opcode_CREATE-evm_code_type_LEGACY-state_test]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test-value_1]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine-value_1]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test-value_1]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test-value_1]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine-value_1]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test-value_1]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test-value_1]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine-value_1]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test-value_1]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test-value_1]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine-value_1]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test-value_1]\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_tx_into_self_delegating_set_code[fork_Prague-blockchain_test]\ntest_tx_into_self_delegating_set_code[fork_Prague-blockchain_test_engine]\ntest_tx_into_self_delegating_set_code[fork_Prague-state_test]\ntest_tx_into_chain_delegating_set_code[fork_Prague-blockchain_test]\ntest_tx_into_chain_delegating_set_code[fork_Prague-blockchain_test_engine]\ntest_tx_into_chain_delegating_set_code[fork_Prague-state_test]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test-EMPTY_ACCOUNT-balance_0]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test-EMPTY_ACCOUNT-balance_1]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test-EOA-balance_0]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test-EOA-balance_1]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test-EOA_WITH_SET_CODE-balance_0]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test-EOA_WITH_SET_CODE-balance_1]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test-CONTRACT-balance_0]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test-CONTRACT-balance_1]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test_engine-EMPTY_ACCOUNT-balance_0]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test_engine-EMPTY_ACCOUNT-balance_1]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test_engine-EOA-balance_0]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test_engine-EOA-balance_1]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test_engine-EOA_WITH_SET_CODE-balance_0]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test_engine-EOA_WITH_SET_CODE-balance_1]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test_engine-CONTRACT-balance_0]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test_engine-CONTRACT-balance_1]\ntest_ext_code_on_set_code[fork_Prague-state_test-EMPTY_ACCOUNT-balance_0]\ntest_ext_code_on_set_code[fork_Prague-state_test-EMPTY_ACCOUNT-balance_1]\ntest_ext_code_on_set_code[fork_Prague-state_test-EOA-balance_0]\ntest_ext_code_on_set_code[fork_Prague-state_test-EOA-balance_1]\ntest_ext_code_on_set_code[fork_Prague-state_test-EOA_WITH_SET_CODE-balance_0]\ntest_ext_code_on_set_code[fork_Prague-state_test-EOA_WITH_SET_CODE-balance_1]\ntest_ext_code_on_set_code[fork_Prague-state_test-CONTRACT-balance_0]\ntest_ext_code_on_set_code[fork_Prague-state_test-CONTRACT-balance_1]\ntest_ext_code_on_self_set_code[fork_Prague-blockchain_test-balance_0]\ntest_ext_code_on_self_set_code[fork_Prague-blockchain_test-balance_1]\ntest_ext_code_on_self_set_code[fork_Prague-blockchain_test_engine-balance_0]\ntest_ext_code_on_self_set_code[fork_Prague-blockchain_test_engine-balance_1]\ntest_ext_code_on_self_set_code[fork_Prague-state_test-balance_0]\ntest_ext_code_on_self_set_code[fork_Prague-state_test-balance_1]\ntest_set_code_address_and_authority_warm_state[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test-call_set_code_address_first_then_authority]\ntest_set_code_address_and_authority_warm_state[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test-call_authority_first_then_set_code_address]\ntest_set_code_address_and_authority_warm_state[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine-call_set_code_address_first_then_authority]\ntest_set_code_address_and_authority_warm_state[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine-call_authority_first_then_set_code_address]\ntest_set_code_address_and_authority_warm_state[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test-call_set_code_address_first_then_authority]\ntest_set_code_address_and_authority_warm_state[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test-call_authority_first_then_set_code_address]\ntest_ext_code_on_self_delegating_set_code[fork_Prague-blockchain_test-balance_0]\ntest_ext_code_on_self_delegating_set_code[fork_Prague-blockchain_test-balance_1]\ntest_ext_code_on_self_delegating_set_code[fork_Prague-blockchain_test_engine-balance_0]\ntest_ext_code_on_self_delegating_set_code[fork_Prague-blockchain_test_engine-balance_1]\ntest_ext_code_on_self_delegating_set_code[fork_Prague-state_test-balance_0]\ntest_ext_code_on_self_delegating_set_code[fork_Prague-state_test-balance_1]\ntest_ext_code_on_chain_delegating_set_code[fork_Prague-blockchain_test]\ntest_ext_code_on_chain_delegating_set_code[fork_Prague-blockchain_test_engine]\ntest_ext_code_on_chain_delegating_set_code[fork_Prague-state_test]\ntest_self_code_on_set_code[fork_Prague-blockchain_test-balance_0]\ntest_self_code_on_set_code[fork_Prague-blockchain_test-balance_1]\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_1]\ntest_self_code_on_set_code[fork_Prague-state_test-balance_0]\ntest_self_code_on_set_code[fork_Prague-state_test-balance_1]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-create_opcode_CREATE2-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-create_opcode_CREATE2-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-create_opcode_CREATE2-evm_code_type_LEGACY-state_test]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-create_opcode_CREATE-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-create_opcode_CREATE-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-create_opcode_CREATE-evm_code_type_LEGACY-state_test]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE-call_set_code_first_False-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE-call_set_code_first_False-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE-call_set_code_first_False-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE-call_set_code_first_False-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE-call_set_code_first_True-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE-call_set_code_first_True-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE-call_set_code_first_True-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE-call_set_code_first_True-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE2-call_set_code_first_False-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE2-call_set_code_first_False-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE2-call_set_code_first_False-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE2-call_set_code_first_False-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE2-call_set_code_first_True-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE2-call_set_code_first_True-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE2-call_set_code_first_True-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE2-call_set_code_first_True-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_set_code_first_False-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_set_code_first_False-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_set_code_first_False-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_set_code_first_False-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_set_code_first_True-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_set_code_first_True-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_set_code_first_True-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_set_code_first_True-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE2-call_set_code_first_False-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE2-call_set_code_first_False-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE2-call_set_code_first_False-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE2-call_set_code_first_False-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE2-call_set_code_first_True-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE2-call_set_code_first_True-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE2-call_set_code_first_True-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE2-call_set_code_first_True-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE-call_set_code_first_False-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE-call_set_code_first_False-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE-call_set_code_first_False-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE-call_set_code_first_False-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE-call_set_code_first_True-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE-call_set_code_first_True-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE-call_set_code_first_True-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE-call_set_code_first_True-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE2-call_set_code_first_False-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE2-call_set_code_first_False-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE2-call_set_code_first_False-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE2-call_set_code_first_False-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE2-call_set_code_first_True-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE2-call_set_code_first_True-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE2-call_set_code_first_True-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE2-call_set_code_first_True-balance_1-external_sendall_recipient_True]\ntest_set_code_multiple_first_valid_authorization_tuples_same_signer[fork_Prague-blockchain_test]\ntest_set_code_multiple_first_valid_authorization_tuples_same_signer[fork_Prague-blockchain_test_engine]\ntest_set_code_multiple_first_valid_authorization_tuples_same_signer[fork_Prague-state_test]\ntest_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce[fork_Prague-blockchain_test]\ntest_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce[fork_Prague-blockchain_test_engine]\ntest_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce[fork_Prague-state_test]\ntest_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce_self_sponsored[fork_Prague-blockchain_test]\ntest_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce_self_sponsored[fork_Prague-blockchain_test_engine]\ntest_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce_self_sponsored[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_all_invalid_authorization_tuples[fork_Prague-blockchain_test]\ntest_set_code_all_invalid_authorization_tuples[fork_Prague-blockchain_test_engine]\ntest_set_code_all_invalid_authorization_tuples[fork_Prague-state_test]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test-invalidity_reason_InvalidityReason.NONCE-transaction_exception_None]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test-invalidity_reason_InvalidityReason.MULTIPLE_NONCE-transaction_exception_None]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test-invalidity_reason_InvalidityReason.CHAIN_ID-transaction_exception_None]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test-invalidity_reason_InvalidityReason.EMPTY_AUTHORIZATION_LIST-transaction_exception_TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test_engine-invalidity_reason_InvalidityReason.NONCE-transaction_exception_None]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test_engine-invalidity_reason_InvalidityReason.MULTIPLE_NONCE-transaction_exception_None]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test_engine-invalidity_reason_InvalidityReason.CHAIN_ID-transaction_exception_None]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test_engine-invalidity_reason_InvalidityReason.EMPTY_AUTHORIZATION_LIST-transaction_exception_TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST]\ntest_set_code_invalid_authorization_tuple[fork_Prague-state_test-invalidity_reason_InvalidityReason.NONCE-transaction_exception_None]\ntest_set_code_invalid_authorization_tuple[fork_Prague-state_test-invalidity_reason_InvalidityReason.MULTIPLE_NONCE-transaction_exception_None]\ntest_set_code_invalid_authorization_tuple[fork_Prague-state_test-invalidity_reason_InvalidityReason.CHAIN_ID-transaction_exception_None]\ntest_set_code_invalid_authorization_tuple[fork_Prague-state_test-invalidity_reason_InvalidityReason.EMPTY_AUTHORIZATION_LIST-transaction_exception_TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST]\ntest_set_code_using_chain_specific_id[fork_Prague-blockchain_test]\ntest_set_code_using_chain_specific_id[fork_Prague-blockchain_test_engine]\ntest_set_code_using_chain_specific_id[fork_Prague-state_test]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=0,r=1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=1,r=1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=2,r=1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=1,r=0,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=1,r=1,s=0]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=0,r=SECP256K1N,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=0,r=SECP256K1N-1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=0,r=SECP256K1N-2,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=1,r=SECP256K1N-2,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=0,r=1,s=SECP256K1N_OVER_2]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=1,r=1,s=SECP256K1N_OVER_2]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=0,r=1,s=SECP256K1N_OVER_2+1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=0,r=1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=1,r=1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=2,r=1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=1,r=0,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=1,r=1,s=0]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=0,r=SECP256K1N,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=0,r=SECP256K1N-1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=0,r=SECP256K1N-2,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=1,r=SECP256K1N-2,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=0,r=1,s=SECP256K1N_OVER_2]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=1,r=1,s=SECP256K1N_OVER_2]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=0,r=1,s=SECP256K1N_OVER_2+1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=0,r=1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=1,r=1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=2,r=1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=1,r=0,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=1,r=1,s=0]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=0,r=SECP256K1N,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=0,r=SECP256K1N-1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=0,r=SECP256K1N-2,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=1,r=SECP256K1N-2,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=0,r=1,s=SECP256K1N_OVER_2]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=1,r=1,s=SECP256K1N_OVER_2]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=0,r=1,s=SECP256K1N_OVER_2+1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-blockchain_test-v_2,r_1,s_1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-blockchain_test-v_0,r_1,s_SECP256K1N_OVER_2+1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-blockchain_test-v_2**256-1,r_1,s_1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-blockchain_test-v_0,r_1,s_2**256-1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-blockchain_test_engine-v_2,r_1,s_1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-blockchain_test_engine-v_0,r_1,s_SECP256K1N_OVER_2+1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-blockchain_test_engine-v_2**256-1,r_1,s_1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-blockchain_test_engine-v_0,r_1,s_2**256-1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-state_test-v_2,r_1,s_1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-state_test-v_0,r_1,s_SECP256K1N_OVER_2+1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-state_test-v_2**256-1,r_1,s_1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-state_test-v_0,r_1,s_2**256-1]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test-v_1,r_0,s_1]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test-v_1,r_1,s_0]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test-v_0,r_SECP256K1N,s_1]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test-v_0,r_SECP256K1N-1,s_1]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test-v_0,r_1,s_SECP256K1N_OVER_2]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test-v_0,r_1,s_SECP256K1N_OVER_2_minus_one]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test-v_1,r_2**256-1,s_1]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test_engine-v_1,r_0,s_1]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test_engine-v_1,r_1,s_0]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test_engine-v_0,r_SECP256K1N,s_1]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test_engine-v_0,r_SECP256K1N-1,s_1]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test_engine-v_0,r_1,s_SECP256K1N_OVER_2]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test_engine-v_0,r_1,s_SECP256K1N_OVER_2_minus_one]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test_engine-v_1,r_2**256-1,s_1]\ntest_set_code_using_invalid_signatures[fork_Prague-state_test-v_1,r_0,s_1]\ntest_set_code_using_invalid_signatures[fork_Prague-state_test-v_1,r_1,s_0]\ntest_set_code_using_invalid_signatures[fork_Prague-state_test-v_0,r_SECP256K1N,s_1]\ntest_set_code_using_invalid_signatures[fork_Prague-state_test-v_0,r_SECP256K1N-1,s_1]\ntest_set_code_using_invalid_signatures[fork_Prague-state_test-v_0,r_1,s_SECP256K1N_OVER_2]\ntest_set_code_using_invalid_signatures[fork_Prague-state_test-v_0,r_1,s_SECP256K1N_OVER_2_minus_one]\ntest_set_code_using_invalid_signatures[fork_Prague-state_test-v_1,r_2**256-1,s_1]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-blockchain_test-log_opcode_LOG0]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-blockchain_test-log_opcode_LOG1]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-blockchain_test-log_opcode_LOG2]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-blockchain_test-log_opcode_LOG3]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-blockchain_test-log_opcode_LOG4]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-log_opcode_LOG0]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-log_opcode_LOG1]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-log_opcode_LOG2]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-log_opcode_LOG3]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-log_opcode_LOG4]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-state_test-log_opcode_LOG0]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-state_test-log_opcode_LOG1]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-state_test-log_opcode_LOG2]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-state_test-log_opcode_LOG3]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-state_test-log_opcode_LOG4]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000b-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000b-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000b-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000c-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000c-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000c-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000d-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000d-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000d-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000e-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000e-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000e-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000f-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000f-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000f-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000010-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000010-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000010-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000011-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000011-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000011-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000012-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000012-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000012-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000013-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000013-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000013-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000a-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000a-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000a-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000009-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000009-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000009-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000005-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000005-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000005-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000006-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000006-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000006-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000007-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000007-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000007-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000008-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000008-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000008-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000001-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000001-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000001-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000002-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000002-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000002-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000003-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000003-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000003-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000004-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000004-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000004-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_system_contract[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-system_contract_0x00000000219ab540356cbb839cbe05303d7705fa-blockchain_test]\ntest_set_code_to_system_contract[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-system_contract_0x00000000219ab540356cbb839cbe05303d7705fa-blockchain_test_engine]\ntest_set_code_to_system_contract[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-system_contract_0x00a3ca265ebcb825b45f985a16cefb49958ce017-blockchain_test]\ntest_set_code_to_system_contract[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-system_contract_0x00a3ca265ebcb825b45f985a16cefb49958ce017-blockchain_test_engine]\ntest_set_code_to_system_contract[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-system_contract_0x00b42dbf2194e931e80326d950320f7d9dbeac02-blockchain_test]\ntest_set_code_to_system_contract[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-system_contract_0x00b42dbf2194e931e80326d950320f7d9dbeac02-blockchain_test_engine]\ntest_set_code_to_system_contract[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-system_contract_0x0aae40965e6800cd9b1f4b05ff21581047e3f91e-blockchain_test]\ntest_set_code_to_system_contract[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-system_contract_0x0aae40965e6800cd9b1f4b05ff21581047e3f91e-blockchain_test_engine]\ntest_set_code_to_system_contract[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-system_contract_0x000f3df6d732807ef1319fb7b8bb8522d0beac02-blockchain_test]\ntest_set_code_to_system_contract[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-system_contract_0x000f3df6d732807ef1319fb7b8bb8522d0beac02-blockchain_test_engine]\ntest_eoa_tx_after_set_code[fork_Prague-tx_type_3-evm_code_type_LEGACY-blockchain_test]\ntest_eoa_tx_after_set_code[fork_Prague-tx_type_3-evm_code_type_LEGACY-blockchain_test_engine]\ntest_eoa_tx_after_set_code[fork_Prague-tx_type_2-evm_code_type_LEGACY-blockchain_test]\ntest_eoa_tx_after_set_code[fork_Prague-tx_type_2-evm_code_type_LEGACY-blockchain_test_engine]\ntest_eoa_tx_after_set_code[fork_Prague-tx_type_1-evm_code_type_LEGACY-blockchain_test]\ntest_eoa_tx_after_set_code[fork_Prague-tx_type_1-evm_code_type_LEGACY-blockchain_test_engine]\ntest_eoa_tx_after_set_code[fork_Prague-tx_type_0-evm_code_type_LEGACY-blockchain_test]\ntest_eoa_tx_after_set_code[fork_Prague-tx_type_0-evm_code_type_LEGACY-blockchain_test_engine]\ntest_reset_code[fork_Prague-blockchain_test-not_self_sponsored]\ntest_reset_code[fork_Prague-blockchain_test-self_sponsored]\ntest_reset_code[fork_Prague-blockchain_test_engine-not_self_sponsored]\ntest_reset_code[fork_Prague-blockchain_test_engine-self_sponsored]\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_set_code_tx/test_set_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: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:
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:
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:test_push0_contracts(state_test, env, pre, post, sender, contract_code, expected_storage)
","text":"Tests PUSH0 within various deployed contracts.
Source code intests/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 intests/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 intests/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 intests/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: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 intests/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:
Initcode must be within a valid EIP-3860 length.
Source code intests/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 intests/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 intests/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 intests/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:
tx_in_withdrawals_block
: Test that the withdrawal value can not be used by a transaction in the same block as the withdrawal.
tx_after_withdrawals_block
: Test that the withdrawal value can be used by a transaction in the subsequent block.
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 intests/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 intests/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 intests/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:
A single block.
Multiple blocks.
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 intests/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 intests/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.
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 intests/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 intests/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:
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 intests/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 intests/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:
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
.
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.
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:
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.
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)
.
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
).
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:
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:
6001
is PUSH1
with the value 0x01
.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>
.
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:
test_
python function to an existing file in any of the existing category subdirectories within tests
.tests
with the appropriate source files and test functions.The Python code in the tests subdirectory ./tests
must fulfill the following checks:
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:
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:
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.
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.
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 ExplanationREFERENCE_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.
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).
@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.
@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.
@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:
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.
@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.
@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.
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.
@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:
@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:
State tests span a single block and, ideally, a single transaction. For example:
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:
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":"Executingtox
","text":""},{"location":"writing_tests/verifying_changes/#prerequisites","title":"Prerequisites","text":"python -m venv ./venv/\nsource ./venv/bin/activate\npip install tox-uv\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":"Executingtox
Environments Individually","text":"There are three tox environments available:
framework
: Lint and test framework and libraries related code in src/
.tests
: Lint and test the test cases in tests/
(runs fill
on all forks deployed to mainnet).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:
pyspelling
:
sudo apt-get install aspell aspell-en\n
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:
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:
FunctionClassModuleimport 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:
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.
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.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.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.
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.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.
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.
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 Defaultdefaults
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.
requiredcases
List[ParameterSet]
A list of pytest.param
objects representing different test cases. Its first argument must be a dictionary defining parameter names and values.
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 DescriptionDict[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.
@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 cases
must contain exactly one value, which is a dictionary of parameter values.cases
list, so the original cases
list is modified.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:
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:
Clientt8n
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:
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":"tests/cancun/eip4844_blobs/test_point_evaluation_precompile.py
includes an EOF test case (#610).tests/frontier/opcodes/test_dup.py
now includes EOF parametrization (#610).tests/frontier/opcodes/test_all_opcodes.py
(#748).consume hive
command is now available to run all types of hive tests (#712).index.json
by default (#716)..meta/
now stores all fixture metadata files by default (#721).fill
command index generation issue due to concurrency (#725).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).with_all_system_contracts
marker, which helps parametrize tests with all contracts that affect the chain on a system level (#739).Conditional
and Switch
now support EOF by adding parameter evm_code_type
(#610).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).with_all_*
markers to specify a lambda function that filters the parametrized values (#739).extend_with_defaults
utility function, which helps extend test case parameter sets with default values. @pytest.mark.parametrize
(#739).Container.Init
to ethereum_test_types.EOF.V1
package, which allows generation of an EOF init container more easily (#739).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).--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).@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).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).--help
flag for consume (#745).fixtures_eip7692.tar.gz
and fixtures_eip7692-prague.tar.gz
respectively (#743).pyproject.toml
(#764).eof_tests
may now contain multiple exceptions in the \"exception\"
field in the form of a pipe (|
) separated string (#759).test_create_selfdestruct_same_tx_increased_nonce
which tests self-destructing a contract with a nonce > 1 (#478).test_double_kill
and test_recreate
which test resurrection of accounts killed with SELFDESTRUCT
(#488).test_dupn.py
and test_swapn.py
(#502).!=
operator for FixedSizeBytes
(#477).pydantic
for type checking in most test types (#486, #501, #508).Op.PUSH1(1) == Op.PUSH1[1] == b\"\\x60\\x01\"
(#513)evmone-eofparse
during fill
execution (#519).--traces
support when running with Hyperledger Besu (#511).--tb=short
) for failure summaries in the test report for more compact terminal output (#542).fill
command now generates HTML test reports with links to the JSON fixtures and debug information (#537).fill
and use them in consume
-generated Hive test reports (#579).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).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).gentest
to use ethereum_test_tools.rpc.rpc
by adding to get_transaction_by_hash
, debug_trace_call
to EthRPC
(#568).fill
via --output=fixtures.tgz
(#627).ethereum_test_tools
library has been split into multiple libraries (#645).transaction
now uses the proper zero-padded hex number format for fields maxPriorityFeePerGas
, maxFeePerGas
, and maxFeePerBlobGas
_info
field) are now calculated by removing the \"_info\" field entirely instead of it being set to an empty dict.fixtures_eip7692.tar.gz
which contains all EOF fixtures (#573).solc-select
for tox when running locally and within CI (#604).fixtures.tar.gz
has been renamed to fixtures_stable.tar.gz
(#573)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).\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).
solc --evm-version
when compiling Yul code (#418).fill -m yul_test
which failed to filter tests that are (dynamically) marked as a yul test (#418).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).Opcodes
enum now contains docstrings with each opcode description, including parameters and return values, which show up in many development environments (#424) @ThreeHrSleep.None
(#452)._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).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).Release v2.1.0 primarily fixes a small bug introduced within the previous release where transition forks are used within the new StateTest
format. This was highlighted by @chfast within #405 (#405), where the fork name ShanghaiToCancunAtTime15k
was found within state tests.
test_blob_gas_subtraction_tx()
verifying the blob gas fee is subtracted from the sender before executing the blob tx (#407).run-parallel
and shared wheel packages for tox
(#408).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":"test_sufficient_balance_blob_tx()
and test_sufficient_balance_blob_tx_pre_fund_tx()
(#379).test_run_until_out_of_gas()
for transient storage opcodes (#401).CALL
and CALLCODE
gas consumption with a positive value transfer (previously lacking coverage) (#371).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).test_insufficient_balance_blob_tx()
to correctly calculate the minimum balance required for the accounts (#379).test_invalid_blob_tx_contract_creation
(#379).BlockchainTest
s to StateTest
s (and additionally generate corresponding BlockchainTest
s) (#368, #370).StateTest
fixture format generation; StateTests
now generate a StateTest
and a corresponding BlockchainTest
test fixture, previously only BlockchainTest
fixtures were generated (#368).StateTestOnly
fixture format is now available and its only difference with StateTest
is that it does not produce a BlockchainTest
(#368).evm_bytes_to_python
command-line utility which converts EVM bytecode to Python Opcodes (#357).>
, >=
, <
, <=
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).ethereum_test_tools.TestParameterGroup
to define test parameters as dataclasses and auto-generate test IDs (#364).--single-fixture-per-file
flag to generate one fixture JSON file per test case (#331).FixtureHeader.join()
(#398).=
with _
in pytest node ids and test fixture names (#342).StateTest
, spec format used to write tests, is now limited to a single transaction per test (#361).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).fill
: Remove the --enable-hive
flag; now all test types are generated by default (#358).fill
(#342).t8n
tool branch to fill tests for development features in the readme (#338).t8n
) to go-ethereum@master (#368).A concrete example of the test name renaming and change in directory structure is provided below.
Fixture output, including release tarballs, now contain subdirectories for different test types:
blockchain_tests
: Contains BlockchainTest
formatted tests
blockchain_tests_hive
: Contains BlockchainTest
with Engine API call directives for use in hivestate_tests
: Contains StateTest
formatted tests
StateTest
, spec format used to write tests, is now limited to a single transaction per test.
=
in both node IDs (and therefore fixture names) have been replaced with _
, which may break tooling that depends on the =
character.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]
.
Pytest node ID example:
Previous node ID: tests/frontier/opcodes/test_dup.py::test_dup[fork=Frontier]
.
New node ID: tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier]
.
Fixture name example:
Previous fixture name: 000-fork=Frontier
New fixture name: tests/frontier/opcodes/test_dup.py::test_dup[fork_Frontier]
(now the same as the pytest node ID).
Fixture JSON file name example (within the release tarball):
Previous fixture file name: fixtures/frontier/opcodes/dup/dup.json
(BlockChainTest
format).
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).rlp_decoded
) to invalid blocks (#322).evm blocktest
command to verify JSON fixtures after test case execution (--verify-fixtures
) (#325).ethereum-spec-evm
(#289).This release mainly serves to update the EIP-4788 beacon roots address to 0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02
, as updated in ethereum/EIPs/pull/7672.
Please use development fixtures from now on when testing Cancun. These refer to changes that are currently under development within clients:
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":"0xbEAC020008aFF7331c0A389CB2AAb67597567d7a
(@spencer-tb in #297).fill
: --disable-hive
flag removed; replaced by --enable-hive
(@spencer-tb in #301).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.
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 Consstatetest
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.
The ethereum/execution-spec-tests repository provides releases of fixtures in various formats (as of 2023-10-16):
Release Artifact Consumer Fork/feature scopefixtures.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.
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:
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.genesisRLP
to obtain the genesis block header, if the block cannot be decoded, fail the test.genesisBlockHeader
, if any field does not match, fail the test.If blocks
contains at least one block, perform the following steps for each FixtureBlock
or InvalidFixtureBlock
:
Determine whether the current block is valid or invalid:
expectException
field is not present, it is valid, and object must be decoded as a FixtureBlock
.expectException
field is present, it is invalid, and object must be decoded as a InvalidFixtureBlock
.Attempt to decode field rlp
as the current block
Attempt to apply the current decoded block on top of the current head of the chain
Compare the hash of the current head of the chain against lastblockhash
, if they do not match, fail the test.
post
against the current state, if any do not match, fail the test.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.
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
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.
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:
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.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.
For each FixtureEngineNewPayload
in engineNewPayloads
:
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.errorCode
is present:errorCode
, otherwise fail the test.valid
is false
, verify that the directive returns status
field of PayloadStatusV1 as INVALID
, otherwise fail the test.valid
is true
, verify that the directive returns status
field of PayloadStatusV1 as VALID
, otherwise fail the test.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.
engineFcuVersion
: Number
","text":"Version of the engine_forkchoiceUpdatedVX
directive to use to set the head of the chain.
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
.
version
: Number
","text":"Version of the engine_newPayloadVX
directive to use to deliver the payload.
errorCode
: Optional
[
Number
]
","text":"Error code to be returned by the engine_newPayloadVX
directive.
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.
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.
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.
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.
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":"0x00
\"Homestead\"
","text":"0x01
0x00
\"Byzantium\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
\"Constantinople\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
\"ConstantinopleFix\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
\"Istanbul\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
\"MuirGlacier\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
\"Berlin\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
\"BerlinToLondonAt5\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x05
\"London\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
\"ArrowGlacier\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
\"GrayGlacier\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
\"Merge\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
\"MergeToShanghaiAtTime15k\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x3a98
\"Shanghai\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
\"ShanghaiToCancunAtTime15k\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x0
0x3a98
\"Cancun\"
","text":"0x01
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
0x00
The EOF Test fixture format tests are included in the fixtures subdirectory eof_tests
.
These are produced by the EOFTest
test spec.
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.
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 insrc/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 TYPE_4_EMPTY_AUTHORIZATION_LIST = auto()\n \"\"\"\n Transaction is type 4, but has an empty authorization list.\n \"\"\"\n TYPE_4_INVALID_AUTHORITY_SIGNATURE = auto()\n \"\"\"\n Transaction is type 4, but has an empty authorization list.\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.
ADDRESS_TOO_LONG = auto()
class-attribute
instance-attribute
","text":"Transaction to
is not allowed to be more than 20 bytes.
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).
NONCE_IS_MAX = auto()
class-attribute
instance-attribute
","text":"Transaction nonce
is not allowed to be max_uint64 - 1 (this is StateTests).
NONCE_OVERFLOW = auto()
class-attribute
instance-attribute
","text":"Transaction nonce
is not allowed to be more than uint64.
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
.
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/#ethereum_test_exceptions.TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST","title":"TYPE_4_EMPTY_AUTHORIZATION_LIST = auto()
class-attribute
instance-attribute
","text":"Transaction is type 4, but has an empty authorization list.
"},{"location":"consuming_tests/exceptions/#ethereum_test_exceptions.TransactionException.TYPE_4_INVALID_AUTHORITY_SIGNATURE","title":"TYPE_4_INVALID_AUTHORITY_SIGNATURE = auto()
class-attribute
instance-attribute
","text":"Transaction is type 4, but has an empty authorization list.
"},{"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 insrc/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 insrc/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.
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.
For each Fixture
test object in the JSON fixture file, perform the following steps:
pre
as the starting state allocation of the execution environment for the test.env
to configure the current execution environment.For each Fork
key of post
in the test, and for each of the elements of the list of FixtureForkPost
values:
Fork
key.indexes
values, and the transaction
object, decode the transaction to be executed.txbytes
, fail the test.Attempt to apply the transaction using the current execution environment:
expectException
is empty, fail the test.expectException
is not empty, revert the state to the pre-state.expectException
is not empty, fail the test.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.
logs
field of the current FixtureForkPost
, and fail the test if they do not match.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
.
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
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:
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.
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.
uv pip install -e .[docs]\n
"},{"location":"dev/docs/#build-the-documentation","title":"Build the Documentation","text":"One time build:
uv run mkdocs build\n
Do a pre-commit check: One time build and lint/type checking:
pip install tox-uv\ntox -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
:
uv run 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.
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:
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*
|
Build a new version and deploy it to remote (this version will then show up in the version selector list):
uv run 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:
uv run 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 )!
uv run mike deploy --push main\n
If the alias accidentally go change:
uv run mike deploy --push --update-aliases main development\n
"},{"location":"dev/docs/#viewing-and-deleting-versions","title":"Viewing and Deleting Versions","text":"List versions:
uv run mike list\n
Delete a version:
uv run 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:
uv run 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-gen-files
to add nav content for generated content.This section is auto-generated via a combination of:
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.
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:
navigation.md
.navigation.md
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:
uvx pre-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":"act
tool, docs.gh
) for authentication: linux, macos.Authenticate with the Github CLI:
gh auth login\n
bash act -j build --workflows .github/workflows/tox_verify.yaml -s GITHUB_TOKEN=$(gh auth token) --matrix python:3.10
Release builds require the ref
input to be specified. To test a release build locally:
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\" }
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
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.
Write to:
danceratopz
).spencertaylorbrown
/@techbro_ccoli
).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:
--evm-dump-dir
: Write debug information from t8n
tool calls to the specified directory.--traces
: Collect traces of the execution from the transition tool.--verify-fixtures
: Run go-ethereum's evm blocktest
command to verify the generated test fixtures.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.
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.
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.
--verify-fixtures
Examples","text":"No fixture verification performed:
fill\n
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
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
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
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
.
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
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.
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 thet8n
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.
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] [--strict-alloc]\n [--ca-start CA_START] [--ca-incr CA_INCR] [--build-name BUILD_NAME]\n [--evm-dump-dir EVM_DUMP_DIR] [--forks] [--fork FORK] [--from FROM]\n [--until UNTIL]\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\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:
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,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":"geth
/evm
build documentation.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.
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/#uvpip-installation-issues","title":"uv
/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.
Ensure go-ethereum
's evm
tool is in your path. Either build the required version, or alternatively:
sudo add-apt-repository -y ppa:ethereum/ethereum\nsudo apt-get update\nsudo apt-get install ethereum\n
More help: brew update\nbrew upgrade\nbrew tap ethereum/ethereum\nbrew install ethereum solidity\n
More help: Binaries available here:
More help:
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\npip install uv # or curl -LsSf https://astral.sh/uv/install.sh | sh\nuv sync --all-extras\nuv run solc-select use 0.8.24 --always-install\nsource .venv/bin/activate # or run `uv run fill ...`\n
Verify installation:
Explore test cases:
fill --collect-only\n
Expected console output:
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:
evm
tool is as expected (your versions may differ from those in the highlighted box).The corresponding fixture file has been generated:
head fixtures/blockchain_tests/berlin/eip2930_access_list/acl/access_list.json\n
If you encounter issues during installation, see the Installation Troubleshooting guide.
"},{"location":"getting_started/quick_start/#next-steps","title":"Next Steps","text":"--fork
flag.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.
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:
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.
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.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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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\n def keccak256(self) -> \"Bytes\":\n \"\"\"\n Return the keccak256 hash of the opcode byte representation.\n \"\"\"\n k = keccak.new(digest_bits=256)\n return Bytes(k.update(bytes(self)).digest())\n
"},{"location":"library/ethereum_test_base_types/#ethereum_test_base_types.Bytes.__new__","title":"__new__(input)
","text":"Creates a new Bytes object.
Source code insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.Bytes.keccak256","title":"keccak256()
","text":"Return the keccak256 hash of the opcode byte representation.
Source code insrc/ethereum_test_base_types/base_types.py
def keccak256(self) -> \"Bytes\":\n \"\"\"\n Return the keccak256 hash of the opcode byte representation.\n \"\"\"\n k = keccak.new(digest_bits=256)\n return Bytes(k.update(bytes(self)).digest())\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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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
.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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
.
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 insrc/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
.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 TYPE_4_EMPTY_AUTHORIZATION_LIST = auto()\n \"\"\"\n Transaction is type 4, but has an empty authorization list.\n \"\"\"\n TYPE_4_INVALID_AUTHORITY_SIGNATURE = auto()\n \"\"\"\n Transaction is type 4, but has an empty authorization list.\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.
ADDRESS_TOO_LONG = auto()
class-attribute
instance-attribute
","text":"Transaction to
is not allowed to be more than 20 bytes.
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).
NONCE_IS_MAX = auto()
class-attribute
instance-attribute
","text":"Transaction nonce
is not allowed to be max_uint64 - 1 (this is StateTests).
NONCE_OVERFLOW = auto()
class-attribute
instance-attribute
","text":"Transaction nonce
is not allowed to be more than uint64.
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
.
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_exceptions/#ethereum_test_exceptions.TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST","title":"TYPE_4_EMPTY_AUTHORIZATION_LIST = auto()
class-attribute
instance-attribute
","text":"Transaction is type 4, but has an empty authorization list.
"},{"location":"library/ethereum_test_exceptions/#ethereum_test_exceptions.TransactionException.TYPE_4_INVALID_AUTHORITY_SIGNATURE","title":"TYPE_4_INVALID_AUTHORITY_SIGNATURE = auto()
class-attribute
instance-attribute
","text":"Transaction is type 4, but has an empty authorization list.
"},{"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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.
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.
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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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
.
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 insrc/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 insrc/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 insrc/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\n def keccak256(self) -> \"Bytes\":\n \"\"\"\n Return the keccak256 hash of the opcode byte representation.\n \"\"\"\n k = keccak.new(digest_bits=256)\n return Bytes(k.update(bytes(self)).digest())\n
"},{"location":"library/ethereum_test_tools/#ethereum_test_tools.Bytes.__new__","title":"__new__(input)
","text":"Creates a new Bytes object.
Source code insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.Bytes.keccak256","title":"keccak256()
","text":"Return the keccak256 hash of the opcode byte representation.
Source code insrc/ethereum_test_base_types/base_types.py
def keccak256(self) -> \"Bytes\":\n \"\"\"\n Return the keccak256 hash of the opcode byte representation.\n \"\"\"\n k = keccak.new(digest_bits=256)\n return Bytes(k.update(bytes(self)).digest())\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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 TYPE_4_EMPTY_AUTHORIZATION_LIST = auto()\n \"\"\"\n Transaction is type 4, but has an empty authorization list.\n \"\"\"\n TYPE_4_INVALID_AUTHORITY_SIGNATURE = auto()\n \"\"\"\n Transaction is type 4, but has an empty authorization list.\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.
ADDRESS_TOO_LONG = auto()
class-attribute
instance-attribute
","text":"Transaction to
is not allowed to be more than 20 bytes.
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).
NONCE_IS_MAX = auto()
class-attribute
instance-attribute
","text":"Transaction nonce
is not allowed to be max_uint64 - 1 (this is StateTests).
NONCE_OVERFLOW = auto()
class-attribute
instance-attribute
","text":"Transaction nonce
is not allowed to be more than uint64.
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
.
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.TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST","title":"TYPE_4_EMPTY_AUTHORIZATION_LIST = auto()
class-attribute
instance-attribute
","text":"Transaction is type 4, but has an empty authorization list.
"},{"location":"library/ethereum_test_tools/#ethereum_test_tools.TransactionException.TYPE_4_INVALID_AUTHORITY_SIGNATURE","title":"TYPE_4_INVALID_AUTHORITY_SIGNATURE = auto()
class-attribute
instance-attribute
","text":"Transaction is type 4, but has an empty authorization list.
"},{"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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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
.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.
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
.
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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 behaviordefault_action
bytecode is executed.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 insrc/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 insrc/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 insrc/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 Defaultdefaults
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.
requiredcases
List[ParameterSet]
A list of pytest.param
objects representing different test cases. Its first argument must be a dictionary defining parameter names and values.
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 DescriptionDict[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.
@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 cases
must contain exactly one value, which is a dictionary of parameter values.cases
list, so the original cases
list is modified.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 insrc/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 insrc/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 insrc/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 insrc/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.
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.
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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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
.
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 insrc/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 insrc/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 delegation: Address | Literal[\"Self\"] | 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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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, delegation=None)
","text":"Add a previously unused EOA to the pre-alloc with the balance specified by amount
.
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 delegation: Address | Literal[\"Self\"] | 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 insrc/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 insrc/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 else:\n assert self.v is not None, \"v must be set\"\n assert self.r is not None, \"r must be set\"\n assert self.s is not None, \"s must be set\"\n\n # Calculate the address from the signature\n try:\n signature_bytes = (\n int(self.r).to_bytes(32, byteorder=\"big\")\n + int(self.s).to_bytes(32, byteorder=\"big\")\n + bytes([self.v])\n )\n public_key = PublicKey.from_signature_and_message(\n signature_bytes, keccak256(self.signing_bytes), hasher=None\n )\n self.signer = EOA(\n address=Address(keccak256(public_key.format(compressed=False)[1:])[32 - 20 :])\n )\n except Exception:\n # Signer remains `None` in this case\n pass\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 insrc/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 else:\n assert self.v is not None, \"v must be set\"\n assert self.r is not None, \"r must be set\"\n assert self.s is not None, \"s must be set\"\n\n # Calculate the address from the signature\n try:\n signature_bytes = (\n int(self.r).to_bytes(32, byteorder=\"big\")\n + int(self.s).to_bytes(32, byteorder=\"big\")\n + bytes([self.v])\n )\n public_key = PublicKey.from_signature_and_message(\n signature_bytes, keccak256(self.signing_bytes), hasher=None\n )\n self.signer = EOA(\n address=Address(keccak256(public_key.format(compressed=False)[1:])[32 - 20 :])\n )\n except Exception:\n # Signer remains `None` in this case\n pass\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 insrc/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.
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 insrc/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 insrc/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 insrc/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
.
set_fork_requirements(fork)
","text":"Fills the required fields in an environment depending on the fork.
Source code insrc/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\")
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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
.
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 insrc/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
.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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":"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 insrc/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 insrc/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 insrc/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 insrc/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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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":"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.
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":"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":"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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXP--gas","title":"Gas","text":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SHA3--gas","title":"Gas","text":"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":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.BALANCE--gas","title":"Gas","text":"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":"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":"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":"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":"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":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CALLDATACOPY--gas","title":"Gas","text":"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":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.CODECOPY--gas","title":"Gas","text":"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":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODESIZE--gas","title":"Gas","text":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODECOPY--gas","title":"Gas","text":"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":"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":"Byzantium
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURNDATACOPY--gas","title":"Gas","text":"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":"Constantinople
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTCODEHASH--gas","title":"Gas","text":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MLOAD--gas","title":"Gas","text":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE--gas","title":"Gas","text":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MSTORE8--gas","title":"Gas","text":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.SLOAD--gas","title":"Gas","text":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"Cancun
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.MCOPY--gas","title":"Gas","text":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG0--gas","title":"Gas","text":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG1--gas","title":"Gas","text":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG2--gas","title":"Gas","text":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG3--gas","title":"Gas","text":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.LOG4--gas","title":"Gas","text":"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":"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":"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":"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":"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":"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":"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":"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.
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":"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":"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":"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":"Frontier
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.RETURN--gas","title":"Gas","text":"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":"Byzantium
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.DELEGATECALL--gas","title":"Gas","text":"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":"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":"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.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":"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.Prague
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTDELEGATECALL--gas","title":"Gas","text":"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":"Byzantium
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.STATICCALL--gas","title":"Gas","text":"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":"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.Prague
"},{"location":"library/ethereum_test_vm/#ethereum_test_vm.Opcodes.EXTSTATICCALL--gas","title":"Gas","text":"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":"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":"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":"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 insrc/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 insrc/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 insrc/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 insrc/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.
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 insrc/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.
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 insrc/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 insrc/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 insrc/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 insrc/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.
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 insrc/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 insrc/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
.
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.
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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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
@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.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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 delegation: Address | Literal[\"Self\"] | 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 or delegation is not None:\n if storage is None and delegation 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 if not isinstance(delegation, Address) and delegation == \"Self\":\n delegation = eoa\n account = Account(\n nonce=1,\n balance=amount,\n storage=storage if storage is not None else {},\n code=DELEGATION_DESIGNATION + bytes(delegation) # type: ignore\n if delegation is not None\n else b\"\",\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 insrc/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 insrc/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 insrc/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!
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, delegation=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 insrc/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 delegation: Address | Literal[\"Self\"] | 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 or delegation is not None:\n if storage is None and delegation 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 if not isinstance(delegation, Address) and delegation == \"Self\":\n delegation = eoa\n account = Account(\n nonce=1,\n balance=amount,\n storage=storage if storage is not None else {},\n code=DELEGATION_DESIGNATION + bytes(delegation) # type: ignore\n if delegation is not None\n else b\"\",\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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 Defaultmetafunc
Metafunc
Pytest's metafunc object.
requiredvalidity_marker_name
str
Name of the validity marker to validate and return.
requiredtest_name
str
The name of the test being parametrized by pytest_generate_tests
.
Returns:
Type DescriptionSet[Fork]
The name of the fork specified to the validity marker.
Source code insrc/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 insrc/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 insrc/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 insrc/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 insrc/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":"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 insrc/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 DescriptionException
If the module path contains \"eip\" and the module does not define a reference spec.
Returns:
Name Type Descriptionspec_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 insrc/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
.
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.
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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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 insrc/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.
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 intests/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.
test_modexp(state_test, input, output, pre)
","text":"Test the MODEXP precompile
Source code intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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.
TestTransientStorageInContractCreation
","text":"Test transient storage in contract creation contexts:
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 intests/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.
test_subcall(state_test, env, pre, tx, post)
","text":"Test transient storage with a subcall using the following opcodes:
CALL
CALLCODE
DELEGATECALL
STATICCALL
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.
test_reentrant_call(state_test, pre, bytecode, expected_storage)
","text":"Test transient storage in different reentrancy contexts.
Source code intests/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.
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 intests/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 intests/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 intests/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 intests/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 testAdd a function that is named test_<test_name>
and takes at least the following arguments:
All other pytest.fixtures
can be parametrized to generate new combinations and test cases.
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.
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.
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 intests/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.
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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 caseinput
: object containing commitment
, proof
, z
and y
output
: expected output of the evaluation, true, false or null.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:
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
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
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.
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 intests/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 intests/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 testAdd a function that is named test_<test_name>
and takes at least the following arguments:
All other pytest.fixture
fixtures can be parametrized to generate new combinations and test cases.
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.
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:
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:
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:
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.
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:
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:
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:
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:
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:
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 transactionblob count > MAX_BLOBS_PER_BLOCK
in type 3 transactiontests/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:
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:
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 intests/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:
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 intests/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:
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:
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 intests/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 intests/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.
Add a function that is named test_<test_name>
and takes at least the following arguments:
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.
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]
.
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.
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 intests/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.
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.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.
Add a function that is named test_<test_name>
and takes at least the following arguments:
The following arguments need to be parametrized or the test will not be generated:
All other pytest.fixture
fixtures can be parametrized to generate new combinations and test cases.
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:
[0, MAX_BLOBS_PER_BLOCK]
blobs[0, TARGET_BLOBS_PER_BLOCK]
equivalent value of excess blob gastests/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:
> 2^32
> 2^32
> 2^64
> 2^64
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 intests/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.
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 blockblobGasUsed
is the max uint64 valuetests/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
TARGET_BLOB_GAS_PER_BLOCK
in a single block with zero blobsTARGET_BLOB_GAS_PER_BLOCK
in a single block with max blobstests/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
.
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.
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.
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.
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.
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`:
TARGET_BLOBS_PER_BLOCK + 1
blobs, but excessBlobGas
is off by \u00b11TARGET_BLOBS_PER_BLOCK - 1
blobs, but excessBlobGas
is off by \u00b11tests/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.
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.
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.
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.
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 testAdd a function that is named test_<test_name>
and takes at least the following arguments:
The following arguments need to be parametrized or the test will not be generated:
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.
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.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:
z
and y
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.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:
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.
gas_limit
with exact necessary gas, insufficient gas and extra gas.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 intests/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 intests/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:
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 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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 usingtests/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 usingtests/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 usingtests/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 usingtests/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 usingtests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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
.
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.
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 intests/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 intests/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 intests/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:
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:
Start with contract 0xaa
which has initial balance of 3 wei. 0xaa
contract code simply performs a self-destruct to itself.
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.
Store the balance of 0xaa
after the first transaction is processed. 0xaa
self-destructed. Expected outcome: 0 wei.
Send another transaction (tx 2) to call 0xaa with 5 wei.
Store the balance of 0xaa
after the second transaction is processed. No self-destruct. Expected outcome: 5 wei.
Verify that:
0xaa
self-destructed.0xaa
after each tx are correct.0xaa
does not execute, hence self-destruct mechanism does not trigger.TODO: EOF - This test could be parametrized for EOFCREATE
Source code intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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.
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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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":"tests/prague/eip7692_eof_v1/eip3540_eof_v1test_example_valid_invalid.py::test_example_valid_invalid
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k empty_container
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k single_code_section_no_data_section
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_valid_containers -k single_code_section_with_data_section
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k data_section_contents_incomplete
, tests/prague/eip7692_eof_v1/eip3540_eof_v1test_migrated_valid_invalid.py::test_migrated_valid_invalid -k data_section_contents_incomplete
)tests/prague/eip7692_eof_v1/eip3540_eof_v1test_container_validation.py::test_invalid_containers -k no_data_section_contents
, tests/prague/eip7692_eof_v1/eip3540_eof_v1test_migrated_valid_invalid.py::test_migrated_valid_invalid -k no_data_section_contents
)tests/prague/eip7692_eof_v1/tests/prague/eip7692_eof_v1/eip3540_eof_v1test_container_validation.py::test_valid_containers -k multiple_code_sections
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_max_code_sections
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k too_many_code_sections
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k incomplete_magic
)tests/prague/eip7692_eof_v1/eip3540_eof_v1test_container_validation.py::test_magic_validation
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k no_version
)tests/prague/eip7692_eof_v1/eip3540_eof_v1test_container_validation.py::test_version_validation
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k no_type_header
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k no_type_section_size
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k incomplete_type_section_size
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py::test_section_order -k test_position_CasePosition.HEADER-section_test_SectionTest.MISSING-section_kind_TYPE
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k no_code_header
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k code_section_count_missing
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k code_section_count_incomplete
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k code_section_size_missing
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k code_section_size_incomplete
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py::test_section_order -k test_position_CasePosition.HEADER-section_test_SectionTest.MISSING-section_kind_CODE
) tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k zero_code_sections_header
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k empty_code_section
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k empty_code_section_with_non_empty_data
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k truncated_header_data_section
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k truncated_header_data_section_with_container_section
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k no_data_section_size
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k data_section_size_incomplete
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k terminator_incomplete
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k truncated_before_type_section
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k truncated_type_section_before_outputs
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k truncated_type_section_before_max_stack_height
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k truncated_type_section_truncated_max_stack_height
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k no_code_section_contents
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k incomplete_code_section_contents
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k no_data_section_contents
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k trailing_bytes_after_data_section
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py::test_section_order -k test_position_CasePosition.HEADER-section_test_SectionTest.MISSING-section_kind_DATA
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k multiple_data_sections
, tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k multiple_code_and_data_sections
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k unknown_section_1
, tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k unknown_section_2
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k type_section_too
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_valid_containers -k single_code_section_max_stack_size
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_invalid_containers -k single_code_section_max_stack_size_too_large
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k code_section_with_inputs_outputs
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k code_section_input_maximum
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k code_section_output_maximum
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k code_section_input_too_large
, tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k code_section_output_too_large
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k invalid_first_code_section
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k too_many_type_sections
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k multiple_code_headers
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k multiple_data_sections
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py::test_section_order -k 'SectionTest.MISSING-section_kind_TYPE'
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py::test_section_order -k 'SectionTest.MISSING-section_kind_CODE'
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_section_order.py::test_section_order -k 'SectionTest.MISSING-section_kind_DATA'
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_valid_containers[fork_CancunEIP7692-eof_test-single_subcontainer_without_data]
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_valid_containers[fork_CancunEIP7692-eof_test-single_subcontainer_with_data]
)tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py::test_wide_container[fork_CancunEIP7692-eof_test-256]
)tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py::test_wide_container[fork_CancunEIP7692-eof_test-257]
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k no_container_section_count
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k incomplete_container_section_count
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k no_container_section_size
, tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k incomplete_container_section_size
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k zero_container_section_count
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k zero_size_container_section
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k no_container_section_contents
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k multiple_container_headers
)tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py -k invalid
)tests/prague/eip7692_eof_v1/eip7620_eof_create/test_subcontainer_validation.py::test_deep_container
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_valid_containers[fork_CancunEIP7692-eof_test-code_section_input_maximum]
, tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py::test_valid_containers[fork_CancunEIP7692-eof_test-code_section_output_maximum]
)tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k code_section_input_too_large
, tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py -k code_section_output_too_large
)*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)RJUMPI and RJUMPV with the same target
RJUMP* to self (ethereum/tests: src/EOFTestsFiller/efStack/self_referencing_jumps_Copier.json)
tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py -k test_returncontract_valid_index
)tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py::test_returncontract_invalid_truncated_immediate
)tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py -k test_returncontract_invalid_index
)tests/prague/eip7692_eof_v1/eip7620_eof_create/test_returncontract.py::test_returncontract_terminating
)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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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_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 intests/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 intests/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 intests/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_valid_containers","title":"test_valid_containers(eof_test, container)
","text":"Test creating various types of valid EOF V1 contracts using legacy initcode and a contract creating transaction.
Source code intests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py
@pytest.mark.parametrize(\n \"container\",\n [\n Container(\n name=\"single_code_section_with_data_section\",\n sections=[\n Section.Code(code=Op.STOP),\n Section.Data(data=\"0x00\"),\n ],\n ),\n Container(\n name=\"single_code_section_max_stack_size\",\n sections=[\n Section.Code(\n code=(Op.CALLER * MAX_OPERAND_STACK_HEIGHT)\n + (Op.POP * MAX_OPERAND_STACK_HEIGHT)\n + Op.STOP,\n max_stack_height=MAX_OPERAND_STACK_HEIGHT,\n ),\n ],\n ),\n Container(\n name=\"code_section_with_inputs_outputs\",\n sections=[\n Section.Code(\n code=(Op.PUSH0 + Op.CALLF[1] + Op.STOP),\n ),\n Section.Code(\n code=Op.POP + Op.PUSH0 + Op.RETF,\n code_inputs=1,\n code_outputs=1,\n ),\n ],\n ),\n Container(\n name=\"code_section_input_maximum\",\n sections=[\n Section.Code(\n code=((Op.PUSH0 * MAX_CODE_INPUTS) + Op.CALLF[1] + Op.STOP),\n max_stack_height=MAX_CODE_INPUTS,\n ),\n Section.Code(\n code=(Op.POP * MAX_CODE_INPUTS) + Op.RETF,\n code_inputs=MAX_CODE_INPUTS,\n code_outputs=0,\n max_stack_height=MAX_CODE_INPUTS,\n ),\n ],\n ),\n Container(\n name=\"code_section_output_maximum\",\n sections=[\n Section.Code(\n code=(Op.CALLF[1] + Op.STOP),\n max_stack_height=MAX_CODE_OUTPUTS,\n ),\n Section.Code(\n code=(Op.PUSH0 * MAX_CODE_OUTPUTS) + Op.RETF,\n code_inputs=0,\n code_outputs=MAX_CODE_OUTPUTS,\n max_stack_height=MAX_CODE_OUTPUTS,\n ),\n ],\n ),\n Container(\n name=\"multiple_code_sections\",\n sections=[\n Section.Code(\n Op.CALLF[1] + Op.STOP,\n ),\n Section.Code(\n code=Op.RETF,\n code_inputs=0,\n code_outputs=0,\n ),\n ],\n ),\n Container(\n name=\"multiple_code_sections_max_inputs_max_outputs\",\n sections=[\n Section.Code(\n (Op.PUSH0 * MAX_CODE_OUTPUTS) + Op.CALLF[1] + Op.STOP,\n max_stack_height=MAX_CODE_OUTPUTS,\n ),\n Section.Code(\n code=Op.RETF,\n code_inputs=MAX_CODE_INPUTS,\n code_outputs=MAX_CODE_OUTPUTS,\n max_stack_height=MAX_CODE_INPUTS,\n ),\n ],\n ),\n Container(\n name=\"single_subcontainer_without_data\",\n sections=[\n Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP),\n Section.Container(Container.Code(Op.INVALID)),\n ],\n ),\n Container(\n name=\"single_subcontainer_with_data\",\n sections=[\n Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP),\n Section.Container(Container.Code(Op.INVALID)),\n Section.Data(data=\"0xAA\"),\n ],\n ),\n ],\n ids=lambda c: c.name,\n)\ndef test_valid_containers(\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_container_validation/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_container_validation.test_invalid_containers","title":"test_invalid_containers(eof_test, container)
","text":"Test creating various types of valid EOF V1 contracts using legacy initcode and a contract creating transaction.
Source code intests/prague/eip7692_eof_v1/eip3540_eof_v1/test_container_validation.py
@pytest.mark.parametrize(\n \"container\",\n [\n Container(\n name=\"empty_container\",\n raw_bytes=b\"\",\n validity_error=[\n EOFException.INVALID_MAGIC,\n ],\n ),\n Container(\n name=\"single_code_section_no_data_section\",\n sections=[\n Section.Code(Op.STOP),\n ],\n auto_data_section=False,\n validity_error=[\n EOFException.MISSING_DATA_SECTION,\n EOFException.UNEXPECTED_HEADER_KIND,\n ],\n ),\n Container(\n name=\"incomplete_magic\",\n raw_bytes=bytes([0xEF]),\n validity_error=EOFException.INVALID_MAGIC,\n ),\n Container(\n name=\"no_version\",\n raw_bytes=bytes([0xEF, 0x00]),\n validity_error=[EOFException.INVALID_VERSION, EOFException.INVALID_MAGIC],\n ),\n Container(\n name=\"no_type_header\",\n raw_bytes=bytes([0xEF, 0x00, 0x01]),\n # TODO the exception must be about missing section types\n validity_error=EOFException.MISSING_HEADERS_TERMINATOR,\n ),\n Container(\n name=\"no_type_section_size\",\n raw_bytes=bytes(\n [0xEF, 0x00, 0x01, 0x01],\n ),\n # TODO the exception must be about incomplete section in the header\n validity_error=[\n EOFException.MISSING_HEADERS_TERMINATOR,\n EOFException.INVALID_TYPE_SECTION_SIZE,\n ],\n ),\n Container(\n name=\"incomplete_type_section_size\",\n raw_bytes=bytes(\n [0xEF, 0x00, 0x01, 0x01, 0x00],\n ),\n # TODO the exception must be about incomplete section in the header\n validity_error=[\n EOFException.INCOMPLETE_SECTION_SIZE,\n EOFException.INVALID_TYPE_SECTION_SIZE,\n ],\n ),\n Container(\n name=\"no_code_header\",\n raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04]),\n validity_error=[\n EOFException.MISSING_CODE_HEADER,\n EOFException.MISSING_HEADERS_TERMINATOR,\n ],\n ),\n Container(\n name=\"no_code_header_2\",\n raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0xFE]),\n validity_error=[EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"no_code_header_3\",\n raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x00]),\n validity_error=[EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"code_section_count_missing\",\n raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02]),\n validity_error=EOFException.INCOMPLETE_SECTION_NUMBER,\n ),\n Container(\n name=\"code_section_count_incomplete\",\n raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0x00]),\n validity_error=EOFException.INCOMPLETE_SECTION_NUMBER,\n ),\n Container(\n name=\"code_section_size_missing\",\n raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0x00, 0x01]),\n validity_error=[\n EOFException.MISSING_HEADERS_TERMINATOR,\n EOFException.ZERO_SECTION_SIZE,\n ],\n ),\n Container(\n name=\"code_section_size_incomplete\",\n raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0x00, 0x01, 0x00]),\n validity_error=[EOFException.INCOMPLETE_SECTION_SIZE, EOFException.ZERO_SECTION_SIZE],\n ),\n Container(\n name=\"code_section_count_0x8000_truncated\",\n raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0x80, 0x00]),\n validity_error=EOFException.TOO_MANY_CODE_SECTIONS,\n ),\n Container(\n name=\"code_section_count_0xFFFF_truncated\",\n raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0xFF, 0xFF]),\n validity_error=EOFException.TOO_MANY_CODE_SECTIONS,\n ),\n Container(\n name=\"code_section_count_0x8000\",\n raw_bytes=bytes(\n [0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0x80, 0x00] + [0x00, 0x01] * 0x8000\n ),\n validity_error=EOFException.CONTAINER_SIZE_ABOVE_LIMIT,\n ),\n Container(\n name=\"code_section_count_0xFFFF\",\n raw_bytes=bytes(\n [0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0xFF, 0xFF] + [0x00, 0x01] * 0xFFFF\n ),\n validity_error=EOFException.CONTAINER_SIZE_ABOVE_LIMIT,\n ),\n Container(\n name=\"code_section_size_0x8000_truncated\",\n raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0x00, 0x01, 0x80, 0x00]),\n validity_error=EOFException.MISSING_HEADERS_TERMINATOR,\n ),\n Container(\n name=\"code_section_size_0xFFFF_truncated\",\n raw_bytes=bytes([0xEF, 0x00, 0x01, 0x01, 0x00, 0x04, 0x02, 0x00, 0x01, 0xFF, 0xFF]),\n validity_error=EOFException.MISSING_HEADERS_TERMINATOR,\n ),\n Container(\n name=\"terminator_incomplete\",\n header_terminator=b\"\",\n sections=[\n Section(kind=SectionKind.TYPE, data=b\"\", custom_size=4),\n Section.Code(code=b\"\", custom_size=0x01),\n ],\n expected_bytecode=\"ef00 01 01 0004 02 0001 0001 04 0000\",\n validity_error=EOFException.MISSING_HEADERS_TERMINATOR,\n ),\n Container(\n name=\"truncated_header_data_section\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001\",\n validity_error=EOFException.MISSING_HEADERS_TERMINATOR,\n ),\n Container(\n name=\"no_data_section_size\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 04\",\n validity_error=EOFException.MISSING_HEADERS_TERMINATOR,\n ),\n Container(\n name=\"data_section_size_incomplete\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 04 00\",\n validity_error=EOFException.INCOMPLETE_SECTION_SIZE,\n ),\n Container(\n name=\"no_container_section_count\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 03\",\n validity_error=EOFException.INCOMPLETE_SECTION_NUMBER,\n ),\n Container(\n name=\"incomplete_container_section_count\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 03 00\",\n validity_error=EOFException.INCOMPLETE_SECTION_NUMBER,\n ),\n Container(\n name=\"zero_container_section_count\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 03 0000 04 0000 00 00800000 00\",\n validity_error=EOFException.ZERO_SECTION_SIZE,\n ),\n Container(\n name=\"no_container_section_size\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 03 0001\",\n validity_error=EOFException.MISSING_HEADERS_TERMINATOR,\n ),\n Container(\n name=\"incomplete_container_section_size\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 03 0001 00\",\n validity_error=EOFException.INCOMPLETE_SECTION_SIZE,\n ),\n Container(\n name=\"incomplete_container_section_size_2\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 03 0002 0001\",\n validity_error=EOFException.INCOMPLETE_SECTION_SIZE,\n ),\n Container(\n name=\"incomplete_container_section_size_3\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 03 0002 0001 00\",\n validity_error=EOFException.INCOMPLETE_SECTION_SIZE,\n ),\n Container(\n name=\"zero_size_container_section\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 03 0001 0000 04 0000 00 00800000 00\",\n validity_error=EOFException.ZERO_SECTION_SIZE,\n ),\n Container(\n name=\"truncated_header_data_section_with_container_section\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 03 0001 0001\",\n validity_error=EOFException.MISSING_HEADERS_TERMINATOR,\n ),\n Container(\n name=\"no_data_section_size_with_container_section\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 03 0001 0001 04\",\n validity_error=EOFException.MISSING_HEADERS_TERMINATOR,\n ),\n Container(\n name=\"data_section_size_incomplete_with_container_section\",\n raw_bytes=\"ef00 01 01 0004 02 0001 0001 03 0001 0001 04 00\",\n validity_error=EOFException.INCOMPLETE_SECTION_SIZE,\n ),\n Container(\n name=\"no_sections\",\n sections=[],\n auto_data_section=False,\n auto_type_section=AutoSection.NONE,\n expected_bytecode=\"ef0001 00\",\n validity_error=[EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"no_code_section_header\",\n sections=[\n Section(kind=SectionKind.TYPE, data=b\"\\0\\x80\\0\\0\"),\n Section.Data(\"0x00\"),\n ],\n expected_bytecode=\"ef00 01 01 0004 04 0001 00 00800000 00\",\n auto_type_section=AutoSection.NONE,\n validity_error=[EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"too_many_code_sections\",\n sections=[\n Section.Code(Op.JUMPF[i + 1] if i < MAX_CODE_SECTIONS else Op.STOP)\n for i in range(MAX_CODE_SECTIONS + 1)\n ],\n validity_error=EOFException.TOO_MANY_CODE_SECTIONS,\n ),\n Container(\n name=\"zero_code_sections_header\",\n raw_bytes=\"ef00 01 01 0004 02 0000 04 0000 00 00800000\",\n validity_error=[\n EOFException.ZERO_SECTION_SIZE,\n EOFException.INCOMPLETE_SECTION_NUMBER,\n ],\n ),\n Container(\n name=\"zero_code_sections_header_empty_type_section\",\n raw_bytes=\"ef00 01 01 0000 02 0000 04 0000 00\",\n validity_error=[\n EOFException.ZERO_SECTION_SIZE,\n EOFException.INCOMPLETE_SECTION_NUMBER,\n ],\n ),\n # The basic `no_section_terminator` cases just remove the terminator\n # and the `00` for zeroth section inputs looks like one. Error is because\n # the sections are wrongly sized.\n Container(\n name=\"no_section_terminator\",\n header_terminator=bytes(),\n sections=[Section.Code(code=Op.STOP)],\n validity_error=[\n EOFException.INVALID_SECTION_BODIES_SIZE,\n EOFException.INVALID_FIRST_SECTION_TYPE,\n ],\n ),\n Container(\n name=\"no_section_terminator_1\",\n header_terminator=bytes(),\n sections=[Section.Code(code=Op.STOP, custom_size=2)],\n validity_error=[\n EOFException.INVALID_SECTION_BODIES_SIZE,\n EOFException.INVALID_FIRST_SECTION_TYPE,\n ],\n ),\n Container(\n name=\"no_section_terminator_2\",\n header_terminator=bytes(),\n sections=[Section.Code(code=\"0x\", custom_size=3)],\n validity_error=EOFException.INVALID_SECTION_BODIES_SIZE,\n ),\n Container(\n name=\"no_section_terminator_3\",\n header_terminator=bytes(),\n sections=[Section.Code(code=Op.PUSH1(0) + Op.STOP)],\n validity_error=[\n EOFException.INVALID_SECTION_BODIES_SIZE,\n EOFException.INVALID_FIRST_SECTION_TYPE,\n ],\n ),\n # The following cases just remove the terminator\n # and the `00` for zeroth section inputs looks like one. Section bodies\n # are as the size prescribes here, so the error is about the inputs of zeroth section.\n Container(\n name=\"no_section_terminator_section_bodies_ok_1\",\n header_terminator=bytes(),\n sections=[Section.Code(code=Op.JUMPDEST + Op.STOP, custom_size=1)],\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n Container(\n name=\"no_section_terminator_section_bodies_ok_2\",\n header_terminator=bytes(),\n sections=[Section.Code(code=Op.JUMPDEST * 2 + Op.STOP, custom_size=2)],\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n # Here the terminator is missing but made to look like a different section\n # or arbitrary byte\n Container(\n name=\"no_section_terminator_nonzero\",\n header_terminator=b\"01\",\n sections=[Section.Code(code=Op.STOP)],\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"no_section_terminator_nonzero_1\",\n header_terminator=b\"02\",\n sections=[Section.Code(code=Op.STOP, custom_size=2)],\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"no_section_terminator_nonzero_2\",\n header_terminator=b\"03\",\n sections=[Section.Code(code=\"0x\", custom_size=3)],\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"no_section_terminator_nonzero_3\",\n header_terminator=b\"04\",\n sections=[Section.Code(code=Op.PUSH1(0) + Op.STOP)],\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"no_section_terminator_nonzero_4\",\n header_terminator=b\"fe\",\n sections=[Section.Code(code=Op.PUSH1(0) + Op.STOP)],\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"truncated_before_type_section\",\n sections=[\n Section(kind=SectionKind.TYPE, data=b\"\", custom_size=4),\n Section.Code(code=b\"\", custom_size=0x01),\n ],\n expected_bytecode=\"ef00 01 01 0004 02 0001 0001 04 0000 00\",\n validity_error=EOFException.INVALID_SECTION_BODIES_SIZE,\n ),\n Container(\n name=\"truncated_type_section_before_outputs\",\n sections=[\n Section(kind=SectionKind.TYPE, data=b\"\\0\", custom_size=4),\n Section.Code(code=b\"\", custom_size=0x01),\n ],\n expected_bytecode=\"ef00 01 01 0004 02 0001 0001 04 0000 00 00\",\n validity_error=EOFException.INVALID_SECTION_BODIES_SIZE,\n ),\n Container(\n name=\"truncated_type_section_before_max_stack_height\",\n sections=[\n Section(kind=SectionKind.TYPE, data=b\"\\0\\x80\", custom_size=4),\n Section.Code(code=b\"\", custom_size=0x01),\n ],\n expected_bytecode=\"ef00 01 01 0004 02 0001 0001 04 0000 00 0080\",\n validity_error=EOFException.INVALID_SECTION_BODIES_SIZE,\n ),\n Container(\n name=\"truncated_type_section_truncated_max_stack_height\",\n sections=[\n Section(kind=SectionKind.TYPE, data=b\"\\0\\x80\\0\", custom_size=4),\n Section.Code(code=b\"\", custom_size=0x01),\n ],\n expected_bytecode=\"ef00 01 01 0004 02 0001 0001 04 0000 00 008000\",\n validity_error=EOFException.INVALID_SECTION_BODIES_SIZE,\n ),\n Container(\n name=\"no_code_section_contents\",\n sections=[Section.Code(code=\"0x\", custom_size=0x01)],\n validity_error=EOFException.INVALID_SECTION_BODIES_SIZE,\n ),\n Container(\n name=\"incomplete_code_section_contents\",\n sections=[\n Section.Code(code=Op.STOP, custom_size=0x02),\n ],\n validity_error=EOFException.INVALID_SECTION_BODIES_SIZE,\n ),\n Container(\n name=\"trailing_bytes_after_code_section\",\n sections=[Section.Code(code=Op.PUSH1(0) + Op.STOP)],\n extra=bytes([0xDE, 0xAD, 0xBE, 0xEF]),\n validity_error=EOFException.INVALID_SECTION_BODIES_SIZE,\n ),\n Container(\n name=\"empty_code_section\",\n sections=[Section.Code(code=\"0x\")],\n # TODO the exception must be about code section EOFException.INVALID_CODE_SECTION,\n validity_error=EOFException.ZERO_SECTION_SIZE,\n ),\n Container(\n name=\"empty_code_section_with_non_empty_data\",\n sections=[\n Section.Code(code=\"0x\"),\n Section.Data(data=\"0xDEADBEEF\"),\n ],\n # TODO the exception must be about code section EOFException.INVALID_CODE_SECTION,\n validity_error=EOFException.ZERO_SECTION_SIZE,\n ),\n Container(\n name=\"no_container_section_contents\",\n sections=[\n Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP),\n Section(kind=SectionKind.CONTAINER, data=b\"\", custom_size=20),\n ],\n validity_error=EOFException.INVALID_SECTION_BODIES_SIZE,\n ),\n Container(\n name=\"no_container_section_contents_with_data\",\n sections=[\n Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP),\n Section(kind=SectionKind.CONTAINER, data=b\"\", custom_size=20),\n Section.Data(b\"\\0\" * 20),\n ],\n validity_error=EOFException.TOPLEVEL_CONTAINER_TRUNCATED,\n ),\n Container(\n name=\"no_data_section_contents\",\n sections=[\n Section.Code(Op.STOP),\n Section.Data(data=\"0x\", custom_size=1),\n ],\n code=\"ef0001 010004 0200010001 040001 00 00800000 00\",\n validity_error=EOFException.TOPLEVEL_CONTAINER_TRUNCATED,\n ),\n Container(\n name=\"data_section_contents_incomplete\",\n sections=[\n Section.Code(Op.STOP),\n Section.Data(data=\"0xAABBCC\", custom_size=4),\n ],\n validity_error=EOFException.TOPLEVEL_CONTAINER_TRUNCATED,\n ),\n Container(\n name=\"data_section_preceding_code_section\",\n auto_data_section=False,\n auto_sort_sections=AutoSection.NONE,\n sections=[\n Section.Data(data=\"0xDEADBEEF\"),\n Section.Code(Op.STOP),\n ],\n validity_error=[EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"data_section_without_code_section\",\n sections=[Section.Data(data=\"0xDEADBEEF\")],\n # TODO the actual exception should be EOFException.MISSING_CODE_HEADER\n validity_error=[EOFException.ZERO_SECTION_SIZE, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"no_section_terminator_3a\",\n header_terminator=bytes(),\n sections=[Section.Code(code=\"0x030004\")],\n # TODO the exception must be about terminator\n validity_error=[\n EOFException.INVALID_SECTION_BODIES_SIZE,\n EOFException.INVALID_FIRST_SECTION_TYPE,\n ],\n ),\n Container(\n name=\"no_section_terminator_4a\",\n header_terminator=bytes(),\n sections=[\n Section.Code(Op.STOP),\n Section.Data(data=\"0xAABBCCDD\"),\n ],\n # TODO: The error of this validation can be random.\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n Container(\n name=\"trailing_bytes_after_data_section\",\n extra=bytes([0xEE]),\n sections=[\n Section.Code(code=Op.PUSH1(0) + Op.STOP),\n Section.Data(data=\"0xAABBCCDD\"),\n ],\n # TODO should be more specific exception about trailing bytes\n validity_error=EOFException.INVALID_SECTION_BODIES_SIZE,\n ),\n Container(\n name=\"multiple_data_sections\",\n sections=[\n Section.Code(code=Op.PUSH1(0) + Op.STOP),\n Section.Data(data=\"0xAABBCC\"),\n Section.Data(data=\"0xAABBCC\"),\n ],\n expected_bytecode=(\n \"ef00 01 01 0004 02 0001 0003 04 0003 04 0003 00 00800001 600000 AABBCC AABBCC\"\n ),\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"multiple_code_headers\",\n sections=[\n Section.Code(Op.JUMPF[1]),\n Section.Data(data=\"0xAA\"),\n Section.Code(Op.STOP),\n ],\n auto_sort_sections=AutoSection.ONLY_BODY,\n expected_bytecode=(\n \"ef00 01 01 0008 02 0001 0003 04 0001 02 0001 0001 00\"\n \"00800000 00800000 E50001 00 AA\"\n ),\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"multiple_code_headers_2\",\n sections=[\n Section.Code(Op.JUMPF[1]),\n Section.Code(Op.STOP),\n Section.Data(data=\"0xAA\"),\n ],\n skip_join_concurrent_sections_in_header=True,\n expected_bytecode=(\n \"ef00 01 01 0008 02 0001 0003 02 0001 0001 04 0001 00\"\n \"00800000 00800000 E50001 00 AA\"\n ),\n validity_error=[\n EOFException.MISSING_DATA_SECTION,\n EOFException.UNEXPECTED_HEADER_KIND,\n ],\n ),\n Container(\n name=\"duplicated_code_header\",\n sections=[\n Section.Code(Op.STOP),\n Section.Code(\n b\"\",\n custom_size=1,\n skip_types_header_listing=True,\n skip_types_body_listing=True,\n ),\n Section.Data(data=\"0xAA\"),\n ],\n skip_join_concurrent_sections_in_header=True,\n expected_bytecode=(\n \"ef00 01 01 0004 02 0001 0001 02 0001 0001 04 0001 00 00800000 00 AA\"\n ),\n validity_error=[\n EOFException.MISSING_DATA_SECTION,\n EOFException.UNEXPECTED_HEADER_KIND,\n ],\n ),\n Container(\n name=\"multiple_code_and_data_sections\",\n sections=[\n Section.Code(Op.JUMPF[1]),\n Section.Code(Op.STOP),\n Section.Data(data=\"0xAA\"),\n Section.Data(data=\"0xAA\"),\n ],\n expected_bytecode=(\n \"ef00 01 01 0008 02 0002 0003 0001 04 0001 04 0001 00\"\n \"00800000 00800000 E50001 00 AA AA\"\n ),\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"multiple_code_and_data_sections_2\",\n sections=[\n Section.Code(Op.JUMPF[1]),\n Section.Code(Op.STOP),\n Section.Data(data=\"0xAA\"),\n Section.Data(data=\"0xAA\"),\n ],\n skip_join_concurrent_sections_in_header=True,\n expected_bytecode=(\n \"ef00 01 01 0008 02 0001 0003 02 0001 0001 04 0001 04 0001 00\"\n \"00800000 00800000 E50001 00 AA AA\"\n ),\n validity_error=[\n EOFException.MISSING_DATA_SECTION,\n EOFException.UNEXPECTED_HEADER_KIND,\n ],\n ),\n Container(\n name=\"multiple_container_headers\",\n sections=[\n Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.EOFCREATE[1](0, 0, 0, 0) + Op.STOP),\n Section.Container(Container.Code(code=Op.INVALID)),\n Section.Data(data=\"0xAA\"),\n Section.Container(Container.Code(code=Op.INVALID)),\n ],\n auto_sort_sections=AutoSection.ONLY_BODY,\n expected_bytecode=(\n \"ef00 01 01 0004 02 0001 0015 03 0001 0014 04 0001 03 0001 0014 00\"\n \"00800005 6000600060006000ec00 6000600060006000ec01 00\"\n \"ef00 01 01 0004 02 0001 0001 04 0000 00 00800000 fe\"\n \"ef00 01 01 0004 02 0001 0001 04 0000 00 00800000 fe\"\n \"aa\"\n ),\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"multiple_container_headers_2\",\n sections=[\n Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.EOFCREATE[1](0, 0, 0, 0) + Op.STOP),\n Section.Container(Container.Code(code=Op.INVALID)),\n Section.Container(Container.Code(code=Op.INVALID)),\n Section.Data(data=\"0xAA\"),\n ],\n skip_join_concurrent_sections_in_header=True,\n expected_bytecode=(\n \"ef00 01 01 0004 02 0001 0015 03 0001 0014 03 0001 0014 04 0001 00\"\n \"00800005 6000600060006000ec00 6000600060006000ec01 00\"\n \"ef00 01 01 0004 02 0001 0001 04 0000 00 00800000 fe\"\n \"ef00 01 01 0004 02 0001 0001 04 0000 00 00800000 fe\"\n \"aa\"\n ),\n validity_error=[\n EOFException.MISSING_DATA_SECTION,\n EOFException.UNEXPECTED_HEADER_KIND,\n ],\n ),\n Container(\n name=\"duplicated_container_header\",\n sections=[\n Section.Code(Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP),\n Section.Container(Container.Code(code=Op.INVALID)),\n Section(kind=SectionKind.CONTAINER, data=b\"\", custom_size=20),\n Section.Data(data=\"0xAA\"),\n ],\n skip_join_concurrent_sections_in_header=True,\n expected_bytecode=(\n \"ef00 01 01 0004 02 0001 000b 03 0001 0014 03 0001 0014 04 0001 00\"\n \"00800004 6000600060006000ec00 00\"\n \"ef00 01 01 0004 02 0001 0001 04 0000 00 00800000 fe\"\n \"aa\"\n ),\n validity_error=[\n EOFException.MISSING_DATA_SECTION,\n EOFException.UNEXPECTED_HEADER_KIND,\n ],\n ),\n Container(\n name=\"unknown_section_1\",\n sections=[\n Section.Code(Op.STOP),\n Section.Data(data=\"0x\"),\n Section(kind=VERSION_MAX_SECTION_KIND + 1, data=\"0x01\"),\n ],\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"unknown_section_2\",\n sections=[\n Section(kind=VERSION_MAX_SECTION_KIND + 1, data=\"0x01\"),\n Section.Data(data=\"0x\"),\n Section.Code(Op.STOP),\n ],\n # TODO the exception should be about unknown section definition\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"unknown_section_empty\",\n sections=[\n Section.Code(Op.STOP),\n Section.Data(data=\"0x\"),\n Section(kind=VERSION_MAX_SECTION_KIND + 1, data=\"0x\"),\n ],\n validity_error=[EOFException.MISSING_TERMINATOR, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"no_type_section\",\n sections=[\n Section.Code(code=Op.STOP),\n Section.Data(\"0x00\"),\n ],\n auto_type_section=AutoSection.NONE,\n validity_error=[EOFException.MISSING_TYPE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"too_many_type_sections\",\n sections=[\n Section(kind=SectionKind.TYPE, data=\"0x00000000\"),\n Section(kind=SectionKind.TYPE, data=\"0x00000000\"),\n Section.Code(Op.STOP),\n ],\n auto_type_section=AutoSection.NONE,\n validity_error=[EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"too_many_type_sections_2\",\n sections=[\n Section(kind=SectionKind.TYPE, data=\"0x00800000\"),\n Section(kind=SectionKind.TYPE, data=\"0x00800000\"),\n Section.Code(Op.STOP),\n ],\n auto_type_section=AutoSection.NONE,\n validity_error=[EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"empty_type_section\",\n sections=[\n Section(kind=SectionKind.TYPE, data=\"0x\"),\n Section.Code(Op.STOP),\n ],\n expected_bytecode=\"ef00 01 01 0000 02 0001 0001 04 0000 00 00\",\n validity_error=[\n EOFException.ZERO_SECTION_SIZE,\n EOFException.INVALID_SECTION_BODIES_SIZE,\n ],\n ),\n Container(\n name=\"type_section_too_small_single_code_section_1\",\n sections=[\n Section(kind=SectionKind.TYPE, data=\"0x00\"),\n Section.Code(Op.STOP),\n ],\n auto_type_section=AutoSection.NONE,\n validity_error=EOFException.INVALID_TYPE_SECTION_SIZE,\n ),\n Container(\n name=\"type_section_too_small_single_code_section_2\",\n sections=[\n Section(kind=SectionKind.TYPE, data=\"0x008000\"),\n Section.Code(Op.STOP),\n ],\n auto_type_section=AutoSection.NONE,\n validity_error=EOFException.INVALID_TYPE_SECTION_SIZE,\n ),\n Container(\n name=\"type_section_too_big_single_code_section\",\n sections=[\n Section(kind=SectionKind.TYPE, data=\"0x0080000000\"),\n Section.Code(Op.STOP),\n ],\n auto_type_section=AutoSection.NONE,\n validity_error=EOFException.INVALID_TYPE_SECTION_SIZE,\n ),\n Container(\n name=\"type_section_too_small_multiple_code_sections_1\",\n sections=[\n Section(kind=SectionKind.TYPE, data=\"0x0080000000\"),\n Section.Code(Op.STOP),\n Section.Code(Op.STOP),\n ],\n auto_type_section=AutoSection.NONE,\n validity_error=EOFException.INVALID_TYPE_SECTION_SIZE,\n ),\n Container(\n name=\"type_section_too_small_multiple_code_sections_2\",\n sections=[\n Section(kind=SectionKind.TYPE, data=\"0x008000000080\"),\n Section.Code(Op.STOP),\n Section.Code(Op.STOP),\n ],\n auto_type_section=AutoSection.NONE,\n validity_error=EOFException.INVALID_TYPE_SECTION_SIZE,\n ),\n Container(\n name=\"type_section_too_big_multiple_code_sections\",\n sections=[\n Section(kind=SectionKind.TYPE, data=\"0x008000000080000000\"),\n Section.Code(Op.STOP),\n Section.Code(Op.STOP),\n ],\n auto_type_section=AutoSection.NONE,\n validity_error=EOFException.INVALID_TYPE_SECTION_SIZE,\n ),\n Container(\n name=\"invalid_first_code_section_inputs_0x01\",\n sections=[Section.Code(code=Op.POP + Op.RETF, code_inputs=1)],\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n Container(\n name=\"invalid_first_code_section_inputs_0x80\",\n sections=[Section.Code(code=Op.POP + Op.RETF, code_inputs=0x80)],\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n Container(\n name=\"invalid_first_code_section_inputs_0xff\",\n sections=[Section.Code(code=Op.POP + Op.RETF, code_inputs=0xFF)],\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n Container(\n name=\"invalid_first_code_section_outputs_0x00\",\n sections=[Section.Code(code=Op.PUSH0 + Op.RETF, code_outputs=0)],\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n Container(\n name=\"invalid_first_code_section_outputs_0x7f\",\n sections=[Section.Code(code=Op.PUSH0 + Op.RETF, code_outputs=0x7F)],\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n Container(\n name=\"invalid_first_code_section_outputs_0x81\",\n sections=[Section.Code(code=Op.PUSH0 + Op.RETF, code_outputs=0x81)],\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n Container(\n name=\"invalid_first_code_section_outputs_0xff\",\n sections=[Section.Code(code=Op.PUSH0 + Op.RETF, code_outputs=0xFF)],\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n Container(\n name=\"multiple_code_section_non_zero_inputs\",\n sections=[\n Section.Code(code=Op.POP + Op.RETF, code_inputs=1),\n Section.Code(Op.STOP),\n ],\n # TODO the actual exception should be EOFException.INVALID_TYPE_BODY,\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n Container(\n name=\"multiple_code_section_non_zero_outputs\",\n sections=[\n Section.Code(code=Op.PUSH0, code_outputs=1),\n Section.Code(Op.STOP),\n ],\n # TODO the actual exception should be EOFException.INVALID_TYPE_BODY,\n validity_error=EOFException.INVALID_FIRST_SECTION_TYPE,\n ),\n Container(\n name=\"data_section_before_code_with_type\",\n sections=[\n Section.Data(data=\"0xAA\"),\n Section.Code(Op.STOP),\n ],\n auto_sort_sections=AutoSection.NONE,\n validity_error=[EOFException.MISSING_CODE_HEADER, EOFException.UNEXPECTED_HEADER_KIND],\n ),\n Container(\n name=\"data_section_listed_in_type\",\n sections=[\n Section.Data(data=\"0x00\", force_type_listing=True),\n Section.Code(Op.STOP),\n ],\n validity_error=[\n EOFException.INVALID_TYPE_SECTION_SIZE,\n EOFException.INVALID_SECTION_BODIES_SIZE,\n ],\n ),\n Container(\n name=\"single_code_section_incomplete_type\",\n sections=[\n Section(kind=SectionKind.TYPE, data=\"0x00\", custom_size=2),\n Section.Code(Op.STOP),\n ],\n validity_error=[\n EOFException.INVALID_SECTION_BODIES_SIZE,\n EOFException.INVALID_TYPE_SECTION_SIZE,\n ],\n ),\n Container(\n name=\"code_section_input_too_large\",\n sections=[\n Section.Code(\n code=((Op.PUSH0 * (MAX_CODE_INPUTS + 1)) + Op.CALLF[1] + Op.STOP),\n max_stack_height=(MAX_CODE_INPUTS + 1),\n ),\n Section.Code(\n code=(Op.POP * (MAX_CODE_INPUTS + 1)) + Op.RETF,\n code_inputs=(MAX_CODE_INPUTS + 1),\n code_outputs=0,\n max_stack_height=0,\n ),\n ],\n validity_error=EOFException.INPUTS_OUTPUTS_NUM_ABOVE_LIMIT,\n ),\n Container(\n name=\"invalid_inputs_to_non_returning_code_section_2\",\n sections=[\n Section.Code(\n code=Op.PUSH1(0) * 128 + Op.CALLF[1] + Op.STOP,\n max_stack_height=128,\n ),\n Section.Code(\n Op.STOP,\n code_inputs=128,\n code_outputs=0,\n max_stack_height=128,\n ),\n ],\n validity_error=EOFException.INPUTS_OUTPUTS_NUM_ABOVE_LIMIT,\n ),\n Container(\n name=\"code_section_output_too_large\",\n sections=[\n Section.Code(\n code=(Op.CALLF[1] + Op.STOP),\n max_stack_height=(MAX_CODE_OUTPUTS + 2),\n ),\n Section.Code(\n code=(Op.PUSH0 * (MAX_CODE_OUTPUTS + 2)) + Op.RETF,\n code_inputs=0,\n code_outputs=(MAX_CODE_OUTPUTS + 2),\n max_stack_height=(MAX_CODE_OUTPUTS + 2),\n ),\n ],\n validity_error=EOFException.INPUTS_OUTPUTS_NUM_ABOVE_LIMIT,\n ),\n Container(\n name=\"code_section_output_too_large_2\",\n sections=[\n Section.Code(\n code=Op.JUMPF[1],\n ),\n Section.Code(\n code=(Op.PUSH0 * (MAX_CODE_OUTPUTS + 1)) + Op.RETF,\n code_inputs=0,\n code_outputs=(MAX_CODE_OUTPUTS + 1),\n max_stack_height=(MAX_CODE_OUTPUTS + 1),\n ),\n ],\n validity_error=EOFException.INVALID_NON_RETURNING_FLAG,\n ),\n Container(\n name=\"single_code_section_max_stack_size_too_large\",\n sections=[\n Section.Code(\n code=Op.CALLER * 1024 + Op.POP * 1024 + Op.STOP,\n max_stack_height=1024,\n ),\n ],\n # TODO auto types section generation probably failed, the exception must be about code\n validity_error=EOFException.MAX_STACK_HEIGHT_ABOVE_LIMIT,\n ),\n ],\n ids=lambda c: c.name,\n)\ndef test_invalid_containers(\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_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 intests/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 intests/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 intests/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=\"single_code_section\",\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 intests/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_valid_containers[fork_CancunEIP7692-eof_test-single_code_section_with_data_section]\ntest_valid_containers[fork_CancunEIP7692-eof_test-single_code_section_max_stack_size]\ntest_valid_containers[fork_CancunEIP7692-eof_test-code_section_with_inputs_outputs]\ntest_valid_containers[fork_CancunEIP7692-eof_test-code_section_input_maximum]\ntest_valid_containers[fork_CancunEIP7692-eof_test-code_section_output_maximum]\ntest_valid_containers[fork_CancunEIP7692-eof_test-multiple_code_sections]\ntest_valid_containers[fork_CancunEIP7692-eof_test-multiple_code_sections_max_inputs_max_outputs]\ntest_valid_containers[fork_CancunEIP7692-eof_test-single_subcontainer_without_data]\ntest_valid_containers[fork_CancunEIP7692-eof_test-single_subcontainer_with_data]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-empty_container]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-single_code_section_no_data_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-incomplete_magic]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_version]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_type_header]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_type_section_size]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-incomplete_type_section_size]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_code_header]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_code_header_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_code_header_3]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_count_missing]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_count_incomplete]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_size_missing]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_size_incomplete]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_count_0x8000_truncated]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_count_0xFFFF_truncated]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_count_0x8000]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_count_0xFFFF]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_size_0x8000_truncated]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_size_0xFFFF_truncated]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-terminator_incomplete]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-truncated_header_data_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_data_section_size]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-data_section_size_incomplete]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_container_section_count]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-incomplete_container_section_count]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-zero_container_section_count]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_container_section_size]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-incomplete_container_section_size]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-incomplete_container_section_size_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-incomplete_container_section_size_3]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-zero_size_container_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-truncated_header_data_section_with_container_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_data_section_size_with_container_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-data_section_size_incomplete_with_container_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_sections]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_code_section_header]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-too_many_code_sections]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-zero_code_sections_header]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-zero_code_sections_header_empty_type_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_1]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_3]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_section_bodies_ok_1]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_section_bodies_ok_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_nonzero]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_nonzero_1]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_nonzero_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_nonzero_3]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_nonzero_4]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-truncated_before_type_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-truncated_type_section_before_outputs]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-truncated_type_section_before_max_stack_height]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-truncated_type_section_truncated_max_stack_height]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_code_section_contents]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-incomplete_code_section_contents]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-trailing_bytes_after_code_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-empty_code_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-empty_code_section_with_non_empty_data]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_container_section_contents]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_container_section_contents_with_data]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_data_section_contents]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-data_section_contents_incomplete]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-data_section_preceding_code_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-data_section_without_code_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_3a]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_section_terminator_4a]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-trailing_bytes_after_data_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-multiple_data_sections]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-multiple_code_headers]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-multiple_code_headers_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-duplicated_code_header]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-multiple_code_and_data_sections]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-multiple_code_and_data_sections_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-multiple_container_headers]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-multiple_container_headers_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-duplicated_container_header]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-unknown_section_1]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-unknown_section_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-unknown_section_empty]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-no_type_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-too_many_type_sections]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-too_many_type_sections_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-empty_type_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-type_section_too_small_single_code_section_1]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-type_section_too_small_single_code_section_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-type_section_too_big_single_code_section]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-type_section_too_small_multiple_code_sections_1]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-type_section_too_small_multiple_code_sections_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-type_section_too_big_multiple_code_sections]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-invalid_first_code_section_inputs_0x01]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-invalid_first_code_section_inputs_0x80]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-invalid_first_code_section_inputs_0xff]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-invalid_first_code_section_outputs_0x00]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-invalid_first_code_section_outputs_0x7f]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-invalid_first_code_section_outputs_0x81]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-invalid_first_code_section_outputs_0xff]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-multiple_code_section_non_zero_inputs]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-multiple_code_section_non_zero_outputs]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-data_section_before_code_with_type]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-data_section_listed_in_type]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-single_code_section_incomplete_type]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_input_too_large]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-invalid_inputs_to_non_returning_code_section_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_output_too_large]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-code_section_output_too_large_2]\ntest_invalid_containers[fork_CancunEIP7692-eof_test-single_code_section_max_stack_size_too_large]\ntest_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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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_opcodes_in_legacy/","title":"Test Opcodes In Legacy","text":"Documentation for tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_opcodes_in_legacy.py
.
Generate fixtures for these test cases for Prague with:
Prague only:
fill -v tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_opcodes_in_legacy.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_opcodes_in_legacy.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n
Tests all EOF-only opcodes in legacy contracts and expects failure.
"},{"location":"tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_opcodes_in_legacy/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_opcodes_in_legacy.test_opcodes_in_legacy","title":"test_opcodes_in_legacy(state_test, pre, code)
","text":"Test all EOF only opcodes in legacy contracts and expects failure.
Source code intests/prague/eip7692_eof_v1/eip3540_eof_v1/test_opcodes_in_legacy.py
@pytest.mark.parametrize(\n \"code\",\n eof_opcode_blocks,\n)\ndef test_opcodes_in_legacy(state_test: StateTestFiller, pre: Alloc, code: Opcodes):\n \"\"\"\n Test all EOF only opcodes in legacy contracts and expects failure.\n \"\"\"\n env = Environment()\n\n address_test_contract = pre.deploy_contract(\n code=code + Op.SSTORE(slot_code_executed, value_code_executed),\n storage={slot_code_executed: value_non_execution_canary},\n )\n\n post = {\n # assert the canary is not over-written. If it was written then the EOF opcode was valid\n address_test_contract: Account(storage={slot_code_executed: value_non_execution_canary}),\n }\n\n sender = pre.fund_eoa()\n\n tx = Transaction(\n sender=sender,\n to=address_test_contract,\n gas_limit=5_000_000,\n gas_price=10,\n protected=False,\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/eip3540_eof_v1/test_opcodes_in_legacy/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_opcodes_in_legacy.test_opcodes_in_create_tx","title":"test_opcodes_in_create_tx(state_test, pre, code)
","text":"Test all EOF only opcodes in legacy contracts and expects failure.
Source code intests/prague/eip7692_eof_v1/eip3540_eof_v1/test_opcodes_in_legacy.py
@pytest.mark.parametrize(\n \"code\",\n eof_opcode_blocks,\n)\ndef test_opcodes_in_create_tx(state_test: StateTestFiller, pre: Alloc, code: Opcodes):\n \"\"\"\n Test all EOF only opcodes in legacy contracts and expects failure.\n \"\"\"\n env = Environment()\n\n sender = pre.fund_eoa()\n\n tx = Transaction(\n sender=sender,\n to=None,\n gas_limit=5_000_000,\n gas_price=10,\n protected=False,\n data=code,\n )\n\n post = {\n # Should revert in initcode, which results in no contract created\n tx.created_contract: Account.NONEXISTENT\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_opcodes_in_legacy/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_opcodes_in_legacy.test_opcodes_in_create_operation","title":"test_opcodes_in_create_operation(state_test, pre, code, legacy_create_opcode)
","text":"Test all EOF only opcodes in legacy contracts and expects failure.
Source code intests/prague/eip7692_eof_v1/eip3540_eof_v1/test_opcodes_in_legacy.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 \"code\",\n eof_opcode_blocks,\n)\ndef test_opcodes_in_create_operation(\n state_test: StateTestFiller,\n pre: Alloc,\n code: Opcodes,\n legacy_create_opcode: Opcodes,\n):\n \"\"\"\n Test all EOF only opcodes in legacy contracts and expects failure.\n \"\"\"\n env = Environment()\n\n init_code = Initcode(initcode_prefix=code, deploy_code=Op.RETURN(0, 0))\n factory_code = (\n Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n + Op.SSTORE(slot_create_address, legacy_create_opcode(size=Op.CALLDATASIZE))\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 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/eip3540_eof_v1/test_opcodes_in_legacy/#tests.prague.eip7692_eof_v1.eip3540_eof_v1.test_opcodes_in_legacy.test_opcodes_in_eof_calling_legacy","title":"test_opcodes_in_eof_calling_legacy(state_test, pre, code, ext_call_opcode)
","text":"Test all EOF only opcodes in legacy contracts and expects failure.
Source code intests/prague/eip7692_eof_v1/eip3540_eof_v1/test_opcodes_in_legacy.py
@pytest.mark.parametrize(\n (\"ext_call_opcode\"),\n [\n pytest.param(Op.EXTCALL, id=\"EXTCALL\"),\n pytest.param(Op.EXTDELEGATECALL, id=\"EXTDELEGATECALL\"),\n pytest.param(Op.EXTSTATICCALL, id=\"EXTSTATICCALL\"),\n ],\n)\n@pytest.mark.parametrize(\n \"code\",\n eof_opcode_blocks,\n)\ndef test_opcodes_in_eof_calling_legacy(\n state_test: StateTestFiller,\n pre: Alloc,\n code: Opcodes,\n ext_call_opcode: Op,\n):\n \"\"\"\n Test all EOF only opcodes in legacy contracts and expects failure.\n \"\"\"\n env = Environment()\n\n address_test_contract = pre.deploy_contract(\n code=code + Op.SSTORE(slot_code_executed, value_code_executed),\n storage={slot_code_executed: value_non_execution_canary},\n )\n\n address_entry_contract = pre.deploy_contract(\n code=Container(\n sections=[\n Section.Code(\n ext_call_opcode(address=address_test_contract)\n + Op.SSTORE(slot_code_worked, value_code_worked)\n + Op.STOP\n )\n ]\n ),\n storage={slot_code_executed: value_non_execution_canary},\n )\n\n post = {\n # assert the canary is not over-written. If it was written then the EOF opcode was valid\n address_test_contract: Account(storage={slot_code_executed: value_non_execution_canary}),\n address_entry_contract: Account(\n storage={\n slot_code_executed: value_non_execution_canary,\n slot_code_worked: value_code_worked,\n }\n ),\n }\n\n sender = pre.fund_eoa()\n\n tx = Transaction(\n sender=sender,\n to=address_entry_contract,\n gas_limit=5_000_000,\n gas_price=10,\n protected=False,\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/eip3540_eof_v1/test_opcodes_in_legacy/index/test_cases/","title":"Test Opcodes In Legacy - Test Cases","text":"Test cases generated from tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_opcodes_in_legacy.py
Parametrized test cases generated from the test module tests/prague/eip7692_eof_v1/eip3540_eof_v1/test_opcodes_in_legacy.py
:
test_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-DUPN]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-SWAPN]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-EXCHANGE]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-RJUMP]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-RJUMPI0]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-RJUMPI1]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-CALLF]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-RETF]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-JUMPF]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-EXTCALL]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-EXTDELEGATECALL]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-EXTSTATICCALL]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-DATALOAD]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-DATALOADN]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-DATASIZE]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-DATACOPY]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-EOFCREATE]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test-RETURNCONTRACT]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-DUPN]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-SWAPN]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-EXCHANGE]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMP]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMPI0]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMPI1]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-CALLF]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-RETF]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-JUMPF]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTCALL]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTDELEGATECALL]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTSTATICCALL]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-DATALOAD]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-DATALOADN]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-DATASIZE]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-DATACOPY]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-EOFCREATE]\ntest_opcodes_in_legacy[fork_CancunEIP7692-blockchain_test_engine-RETURNCONTRACT]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-DUPN]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-SWAPN]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-EXCHANGE]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-RJUMP]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-RJUMPI0]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-RJUMPI1]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-CALLF]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-RETF]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-JUMPF]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-EXTCALL]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-EXTDELEGATECALL]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-EXTSTATICCALL]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-DATALOAD]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-DATALOADN]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-DATASIZE]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-DATACOPY]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-EOFCREATE]\ntest_opcodes_in_legacy[fork_CancunEIP7692-state_test-RETURNCONTRACT]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-DUPN]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-SWAPN]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-EXCHANGE]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-RJUMP]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-RJUMPI0]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-RJUMPI1]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-CALLF]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-RETF]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-JUMPF]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-EXTCALL]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-EXTDELEGATECALL]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-EXTSTATICCALL]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-DATALOAD]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-DATALOADN]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-DATASIZE]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-DATACOPY]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-EOFCREATE]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test-RETURNCONTRACT]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-DUPN]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-SWAPN]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-EXCHANGE]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-RJUMP]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-RJUMPI0]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-RJUMPI1]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-CALLF]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-RETF]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-JUMPF]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-EXTCALL]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-EXTDELEGATECALL]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-EXTSTATICCALL]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-DATALOAD]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-DATALOADN]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-DATASIZE]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-DATACOPY]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-EOFCREATE]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-blockchain_test_engine-RETURNCONTRACT]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-DUPN]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-SWAPN]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-EXCHANGE]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-RJUMP]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-RJUMPI0]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-RJUMPI1]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-CALLF]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-RETF]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-JUMPF]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-EXTCALL]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-EXTDELEGATECALL]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-EXTSTATICCALL]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-DATALOAD]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-DATALOADN]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-DATASIZE]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-DATACOPY]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-EOFCREATE]\ntest_opcodes_in_create_tx[fork_CancunEIP7692-state_test-RETURNCONTRACT]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-DUPN-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-DUPN-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-SWAPN-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-SWAPN-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-EXCHANGE-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-EXCHANGE-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-RJUMP-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-RJUMP-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-RJUMPI0-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-RJUMPI0-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-RJUMPI1-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-RJUMPI1-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-CALLF-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-CALLF-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-RETF-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-RETF-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-JUMPF-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-JUMPF-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-EXTCALL-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-EXTCALL-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-EXTDELEGATECALL-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-EXTDELEGATECALL-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-EXTSTATICCALL-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-EXTSTATICCALL-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-DATALOAD-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-DATALOAD-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-DATALOADN-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-DATALOADN-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-DATASIZE-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-DATASIZE-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-DATACOPY-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-DATACOPY-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-EOFCREATE-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-EOFCREATE-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-RETURNCONTRACT-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test-RETURNCONTRACT-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-DUPN-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-DUPN-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-SWAPN-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-SWAPN-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-EXCHANGE-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-EXCHANGE-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-RJUMP-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-RJUMP-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-RJUMPI0-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-RJUMPI0-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-RJUMPI1-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-RJUMPI1-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-CALLF-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-CALLF-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-RETF-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-RETF-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-JUMPF-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-JUMPF-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-EXTCALL-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-EXTCALL-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-EXTDELEGATECALL-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-EXTDELEGATECALL-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-EXTSTATICCALL-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-EXTSTATICCALL-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-DATALOAD-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-DATALOAD-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-DATALOADN-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-DATALOADN-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-DATASIZE-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-DATASIZE-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-DATACOPY-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-DATACOPY-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-EOFCREATE-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-EOFCREATE-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-RETURNCONTRACT-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-blockchain_test_engine-RETURNCONTRACT-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-DUPN-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-DUPN-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-SWAPN-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-SWAPN-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-EXCHANGE-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-EXCHANGE-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-RJUMP-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-RJUMP-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-RJUMPI0-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-RJUMPI0-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-RJUMPI1-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-RJUMPI1-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-CALLF-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-CALLF-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-RETF-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-RETF-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-JUMPF-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-JUMPF-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-EXTCALL-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-EXTCALL-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-EXTDELEGATECALL-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-EXTDELEGATECALL-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-EXTSTATICCALL-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-EXTSTATICCALL-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-DATALOAD-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-DATALOAD-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-DATALOADN-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-DATALOADN-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-DATASIZE-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-DATASIZE-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-DATACOPY-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-DATACOPY-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-EOFCREATE-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-EOFCREATE-CREATE2]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-RETURNCONTRACT-CREATE]\ntest_opcodes_in_create_operation[fork_CancunEIP7692-state_test-RETURNCONTRACT-CREATE2]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DUPN-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DUPN-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DUPN-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-SWAPN-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-SWAPN-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-SWAPN-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXCHANGE-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXCHANGE-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXCHANGE-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RJUMP-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RJUMP-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RJUMP-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RJUMPI0-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RJUMPI0-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RJUMPI0-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RJUMPI1-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RJUMPI1-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RJUMPI1-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-CALLF-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-CALLF-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-CALLF-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RETF-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RETF-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RETF-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-JUMPF-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-JUMPF-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-JUMPF-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXTCALL-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXTCALL-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXTCALL-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXTDELEGATECALL-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXTDELEGATECALL-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXTDELEGATECALL-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXTSTATICCALL-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXTSTATICCALL-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EXTSTATICCALL-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATALOAD-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATALOAD-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATALOAD-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATALOADN-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATALOADN-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATALOADN-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATASIZE-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATASIZE-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATASIZE-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATACOPY-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATACOPY-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-DATACOPY-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EOFCREATE-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EOFCREATE-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-EOFCREATE-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RETURNCONTRACT-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RETURNCONTRACT-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test-RETURNCONTRACT-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DUPN-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DUPN-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DUPN-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-SWAPN-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-SWAPN-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-SWAPN-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXCHANGE-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXCHANGE-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXCHANGE-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMP-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMP-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMP-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMPI0-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMPI0-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMPI0-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMPI1-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMPI1-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RJUMPI1-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-CALLF-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-CALLF-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-CALLF-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RETF-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RETF-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RETF-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-JUMPF-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-JUMPF-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-JUMPF-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTCALL-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTCALL-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTCALL-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTDELEGATECALL-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTDELEGATECALL-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTDELEGATECALL-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTSTATICCALL-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTSTATICCALL-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EXTSTATICCALL-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATALOAD-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATALOAD-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATALOAD-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATALOADN-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATALOADN-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATALOADN-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATASIZE-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATASIZE-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATASIZE-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATACOPY-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATACOPY-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-DATACOPY-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EOFCREATE-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EOFCREATE-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-EOFCREATE-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RETURNCONTRACT-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RETURNCONTRACT-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-blockchain_test_engine-RETURNCONTRACT-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DUPN-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DUPN-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DUPN-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-SWAPN-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-SWAPN-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-SWAPN-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXCHANGE-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXCHANGE-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXCHANGE-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RJUMP-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RJUMP-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RJUMP-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RJUMPI0-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RJUMPI0-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RJUMPI0-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RJUMPI1-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RJUMPI1-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RJUMPI1-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-CALLF-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-CALLF-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-CALLF-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RETF-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RETF-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RETF-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-JUMPF-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-JUMPF-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-JUMPF-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXTCALL-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXTCALL-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXTCALL-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXTDELEGATECALL-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXTDELEGATECALL-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXTDELEGATECALL-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXTSTATICCALL-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXTSTATICCALL-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EXTSTATICCALL-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATALOAD-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATALOAD-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATALOAD-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATALOADN-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATALOADN-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATALOADN-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATASIZE-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATASIZE-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATASIZE-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATACOPY-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATACOPY-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-DATACOPY-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EOFCREATE-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EOFCREATE-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-EOFCREATE-EXTSTATICCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RETURNCONTRACT-EXTCALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RETURNCONTRACT-EXTDELEGATECALL]\ntest_opcodes_in_eof_calling_legacy[fork_CancunEIP7692-state_test-RETURNCONTRACT-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/eip3540_eof_v1/test_opcodes_in_legacy.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 intests/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 intests/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 intests/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 intests/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 pytest.param(SectionKind.CONTAINER, SectionSize.NORMAL, None),\n pytest.param(SectionKind.CONTAINER, SectionSize.ZERO, EOFException.ZERO_SECTION_SIZE),\n pytest.param(\n SectionKind.CONTAINER, SectionSize.UNDERSIZE, EOFException.INVALID_SECTION_BODIES_SIZE\n ),\n pytest.param(\n SectionKind.CONTAINER, SectionSize.OVERSIZE, EOFException.INVALID_SECTION_BODIES_SIZE\n ),\n pytest.param(\n SectionKind.CONTAINER, SectionSize.HUGE, EOFException.INVALID_SECTION_BODIES_SIZE\n ),\n pytest.param(\n SectionKind.CONTAINER, SectionSize.MAX, EOFException.INVALID_SECTION_BODIES_SIZE\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.EOFCREATE[0](0, 0, 0, 0) + Op.STOP,\n custom_size=section_size,\n )\n )\n else:\n eof_code.sections.append(\n Section.Code(\n code=Op.ADDRESS + Op.POP + Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP,\n )\n )\n\n if section_size != SectionSize.NORMAL and section_kind == SectionKind.CONTAINER:\n eof_code.sections.append(\n Section.Container(\n container=Container(\n sections=[\n Section.Code(Op.RETURNCONTRACT[0](0, 0)),\n Section.Container(container=Container(sections=[Section.Code(Op.STOP)])),\n ]\n ),\n custom_size=section_size,\n )\n )\n else:\n eof_code.sections.append(\n Section.Container(\n container=Container(\n sections=[\n Section.Code(Op.RETURNCONTRACT[0](0, 0)),\n Section.Container(container=Container(sections=[Section.Code(Op.STOP)])),\n ]\n ),\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 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 intests/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 intests/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_section_size[fork_CancunEIP7692-eof_test-section_kind_CONTAINER-section_size_NORMAL-exception_None]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_CONTAINER-section_size_ZERO-exception_EOFException.ZERO_SECTION_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_CONTAINER-section_size_UNDERSIZE-exception_EOFException.INVALID_SECTION_BODIES_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_CONTAINER-section_size_OVERSIZE-exception_EOFException.INVALID_SECTION_BODIES_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_CONTAINER-section_size_HUGE-exception_EOFException.INVALID_SECTION_BODIES_SIZE]\ntest_section_size[fork_CancunEIP7692-eof_test-section_kind_CONTAINER-section_size_MAX-exception_EOFException.INVALID_SECTION_BODIES_SIZE]\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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpi.test_rjumpi_backwards_min_stack_wrong","title":"test_rjumpi_backwards_min_stack_wrong(eof_test)
","text":"Backwards rjumpi where min_stack does not match
Source code intests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
def test_rjumpi_backwards_min_stack_wrong(\n eof_test: EOFTestFiller,\n):\n \"\"\"\n Backwards rjumpi where min_stack does not match\n \"\"\"\n container = Container.Code(\n code=(\n Op.PUSH0 # (0, 0)\n + Op.PUSH1(0) # (1, 1)\n + Op.RJUMPI[1] # (2, 2) To PUSH1\n + Op.PUSH0 # (1, 1)\n + Op.PUSH1(4) # (1, 2)\n + Op.RJUMPI[-9] # (2, 3) To first RJUMPI with (1, 2)\n + Op.STOP # (1, 2)\n ),\n max_stack_height=3,\n )\n eof_test(\n data=container,\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_rjumpv_backwards_min_stack_wrong","title":"test_rjumpi_rjumpv_backwards_min_stack_wrong(eof_test)
","text":"Backwards rjumpv where min_stack does not match
Source code intests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
def test_rjumpi_rjumpv_backwards_min_stack_wrong(\n eof_test: EOFTestFiller,\n):\n \"\"\"\n Backwards rjumpv where min_stack does not match\n \"\"\"\n container = Container.Code(\n code=(\n Op.PUSH0 # (0, 0)\n + Op.PUSH1(0) # (1, 1)\n + Op.RJUMPI[1] # (2, 2) To PUSH1\n + Op.PUSH0 # (1, 1)\n + Op.PUSH1(4) # (1, 2)\n + Op.RJUMPV[-10] # (2, 3) To first RJUMPI with (1, 2)\n + Op.STOP # (1, 2)\n ),\n max_stack_height=3,\n )\n eof_test(\n data=container,\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_double_rjumpi","title":"test_double_rjumpi(eof_test)
","text":"Two RJUNMPIs, causing the min stack to underflow
Source code intests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpi.py
def test_double_rjumpi(\n eof_test: EOFTestFiller,\n):\n \"\"\"\n Two RJUNMPIs, causing the min stack to underflow\n \"\"\"\n container = Container.Code(\n code=(\n Op.PUSH0 # (0, 0)\n + Op.PUSH0 # (1, 1)\n + Op.RJUMPI[5] # (2, 2) To RETURN\n + Op.PUSH0 # (1, 1)\n + Op.PUSH0 # (2, 2)\n + Op.RJUMPI[0] # (3, 3)\n + Op.RETURN # (1, 2) Underflow\n ),\n max_stack_height=3,\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/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]\ntest_rjumpi_backwards_min_stack_wrong[fork_CancunEIP7692-eof_test]\ntest_rjumpi_rjumpv_backwards_min_stack_wrong[fork_CancunEIP7692-eof_test]\ntest_double_rjumpi[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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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/#tests.prague.eip7692_eof_v1.eip4200_relative_jumps.test_rjumpv.test_rjumpv_backwards_min_stack_wrong","title":"test_rjumpv_backwards_min_stack_wrong(eof_test)
","text":"Backwards rjumpv where min_stack does not match
Source code intests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
def test_rjumpv_backwards_min_stack_wrong(\n eof_test: EOFTestFiller,\n):\n \"\"\"\n Backwards rjumpv where min_stack does not match\n \"\"\"\n container = Container.Code(\n code=(\n Op.PUSH0 # (0, 0)\n + Op.PUSH1(0) # (1, 1)\n + Op.RJUMPV[1] # (2, 2) To PUSH1\n + Op.PUSH0 # (1, 1)\n + Op.PUSH1(4) # (1, 2)\n + Op.RJUMPV[-11] # (2, 3) To first RJUMPV with (1, 2)\n + Op.STOP # (1, 2)\n ),\n max_stack_height=3,\n )\n eof_test(\n data=container,\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_rjumpi_backwards_min_stack_wrong","title":"test_rjumpv_rjumpi_backwards_min_stack_wrong(eof_test)
","text":"Backwards rjumpv where min_stack does not match
Source code intests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
def test_rjumpv_rjumpi_backwards_min_stack_wrong(\n eof_test: EOFTestFiller,\n):\n \"\"\"\n Backwards rjumpv where min_stack does not match\n \"\"\"\n container = Container.Code(\n code=(\n Op.PUSH0 # (0, 0)\n + Op.PUSH1(0) # (1, 1)\n + Op.RJUMPV[1] # (2, 2) To PUSH1\n + Op.PUSH0 # (1, 1)\n + Op.PUSH1(4) # (1, 2)\n + Op.RJUMPI[-10] # (2, 3) To first RJUMPV with (1, 2)\n + Op.STOP # (1, 2)\n ),\n max_stack_height=3,\n )\n eof_test(\n data=container,\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_double_rjumpv","title":"test_double_rjumpv(eof_test)
","text":"Two RJUMPVs, causing the min stack to underflow
Source code intests/prague/eip7692_eof_v1/eip4200_relative_jumps/test_rjumpv.py
def test_double_rjumpv(\n eof_test: EOFTestFiller,\n):\n \"\"\"\n Two RJUMPVs, causing the min stack to underflow\n \"\"\"\n container = Container.Code(\n code=(Op.PUSH0 + Op.PUSH0 + Op.RJUMPV[6] + Op.PUSH0 + Op.PUSH0 + Op.RJUMPV[0] + Op.RETURN),\n max_stack_height=3,\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_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]\ntest_rjumpv_backwards_min_stack_wrong[fork_CancunEIP7692-eof_test]\ntest_rjumpv_rjumpi_backwards_min_stack_wrong[fork_CancunEIP7692-eof_test]\ntest_double_rjumpv[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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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: \"ti-%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/#tests.prague.eip7692_eof_v1.eip6206_jumpf.test_jumpf_stack.test_jumpf_incompatible_outputs","title":"test_jumpf_incompatible_outputs(eof_test, target_inputs, target_outputs, stack_height, expected_exception)
","text":"Tests jumpf into fuction with incorrect output sizes
Source code intests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py
@pytest.mark.parametrize(\n [\"target_inputs\", \"target_outputs\", \"stack_height\", \"expected_exception\"],\n [\n pytest.param(1, 0, 1, EOFException.STACK_UNDERFLOW, id=\"less_stack\"),\n pytest.param(2, 1, 2, None, id=\"same_stack\"),\n pytest.param(\n 3, 2, 3, EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS, id=\"more_stack\"\n ),\n pytest.param(\n 2, 2, 1, EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS, id=\"less_output\"\n ),\n pytest.param(1, 1, 1, None, id=\"same_output\"),\n pytest.param(0, 0, 1, None, id=\"more_output\"),\n ],\n)\ndef test_jumpf_incompatible_outputs(\n eof_test: EOFTestFiller,\n target_inputs: int,\n target_outputs: int,\n stack_height: int,\n expected_exception: EOFException,\n):\n \"\"\"\n Tests jumpf into fuction with incorrect output sizes\n \"\"\"\n current_section_outputs = 1\n if (current_section_outputs + target_inputs - target_outputs) != stack_height:\n assert expected_exception is not None\n eof_test(\n data=Container(\n sections=[\n Section.Code(Op.CALLF(1) + Op.STOP, max_stack_height=1),\n Section.Code(\n Op.PUSH0 * stack_height + Op.JUMPF(2),\n code_outputs=current_section_outputs,\n ),\n Section.Code(\n Op.POP * (target_inputs - target_outputs) + Op.RETF,\n code_inputs=target_inputs,\n code_outputs=target_outputs,\n max_stack_height=target_inputs,\n ),\n ]\n ),\n expect_exception=expected_exception,\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_diff_max_stack_height","title":"test_jumpf_diff_max_stack_height(eof_test, target_inputs, target_outputs, stack_height, expected_exception)
","text":"Tests jumpf with a different max stack height
Source code intests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py
@pytest.mark.parametrize(\n [\"target_inputs\", \"target_outputs\", \"stack_height\", \"expected_exception\"],\n [\n pytest.param(1, 0, 1, EOFException.STACK_UNDERFLOW, id=\"less_stack\"),\n pytest.param(2, 1, 2, EOFException.STACK_HIGHER_THAN_OUTPUTS, id=\"same_stack\"),\n pytest.param(\n 3, 2, 3, EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS, id=\"more_stack\"\n ),\n pytest.param(\n 2, 2, 1, EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS, id=\"less_output\"\n ),\n pytest.param(1, 1, 1, EOFException.STACK_HIGHER_THAN_OUTPUTS, id=\"same_output\"),\n pytest.param(0, 0, 1, EOFException.STACK_HIGHER_THAN_OUTPUTS, id=\"more_output\"),\n ],\n)\ndef test_jumpf_diff_max_stack_height(\n eof_test: EOFTestFiller,\n target_inputs: int,\n target_outputs: int,\n stack_height: int,\n expected_exception: EOFException,\n):\n \"\"\"\n Tests jumpf with a different max stack height\n \"\"\"\n current_section_outputs = 1\n eof_test(\n data=Container(\n sections=[\n Section.Code(Op.CALLF(1) + Op.STOP, max_stack_height=1),\n Section.Code(\n (Op.PUSH0 * stack_height) # (0, 0)\n + Op.PUSH0 # (stack_height, stack_height)\n + Op.RJUMPI[1] # (stack_height + 1, stack_height + 1)\n + Op.PUSH0 # (stack_height, stack_height)\n + Op.JUMPF(2), # (stack_height, stack_height + 1)\n code_outputs=current_section_outputs,\n ),\n Section.Code(\n Op.POP * (target_inputs - target_outputs) + Op.RETF,\n code_inputs=target_inputs,\n code_outputs=target_outputs,\n max_stack_height=target_inputs,\n ),\n ]\n ),\n expect_exception=expected_exception,\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_diff_min_stack_height","title":"test_jumpf_diff_min_stack_height(eof_test, target_inputs, target_outputs, stack_height, expected_exception)
","text":"Tests jumpf with a different min stack height
Source code intests/prague/eip7692_eof_v1/eip6206_jumpf/test_jumpf_stack.py
@pytest.mark.parametrize(\n [\"target_inputs\", \"target_outputs\", \"stack_height\", \"expected_exception\"],\n [\n pytest.param(1, 0, 1, EOFException.STACK_UNDERFLOW, id=\"less_stack\"),\n pytest.param(2, 1, 2, EOFException.STACK_UNDERFLOW, id=\"same_stack\"),\n pytest.param(\n 3, 2, 3, EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS, id=\"more_stack\"\n ),\n pytest.param(\n 2, 2, 1, EOFException.JUMPF_DESTINATION_INCOMPATIBLE_OUTPUTS, id=\"less_output\"\n ),\n pytest.param(1, 1, 1, EOFException.STACK_UNDERFLOW, id=\"same_output\"),\n pytest.param(0, 0, 1, EOFException.STACK_UNDERFLOW, id=\"more_output\"),\n ],\n)\ndef test_jumpf_diff_min_stack_height(\n eof_test: EOFTestFiller,\n target_inputs: int,\n target_outputs: int,\n stack_height: int,\n expected_exception: EOFException,\n):\n \"\"\"\n Tests jumpf with a different min stack height\n \"\"\"\n current_section_outputs = 1\n eof_test(\n data=Container(\n sections=[\n Section.Code(Op.CALLF(1) + Op.STOP, max_stack_height=1),\n Section.Code(\n (Op.PUSH0 * (stack_height - 1)) # (0, 0)\n + Op.PUSH0 # (stack_height - 1, stack_height - 1)\n + Op.RJUMPI[1] # (stack_height, stack_height)\n + Op.PUSH0 # (stack_height - 1, stack_height - 1)\n + Op.JUMPF(2), # (stack_height - 1, stack_height)\n code_outputs=current_section_outputs,\n ),\n Section.Code(\n Op.POP * (target_inputs - target_outputs) + Op.RETF,\n code_inputs=target_inputs,\n code_outputs=target_outputs,\n max_stack_height=target_inputs,\n ),\n ]\n ),\n expect_exception=expected_exception,\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-ti-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-less-stack-ti-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-same-stack-ti-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-eof_test-more-stack-ti-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-less-stack-ti-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-same-stack-ti-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-state_test-more-stack-ti-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-less-stack-ti-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-same-stack-ti-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test-more-stack-ti-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-less-stack-ti-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-same-stack-ti-4-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-0-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-0-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-0-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-0-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-0-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-0-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-0-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-0-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-0-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-2-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-2-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-2-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-2-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-2-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-2-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-2-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-2-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-2-to-4-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-4-to-0-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-4-to-0-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-4-to-0-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-4-to-2-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-4-to-2-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-4-to-2-so-4]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-4-to-4-so-0]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-4-to-4-so-2]\ntest_jumpf_stack_returning_rules[fork_CancunEIP7692-blockchain_test_engine-more-stack-ti-4-to-4-so-4]\ntest_jumpf_incompatible_outputs[fork_CancunEIP7692-eof_test-less_stack]\ntest_jumpf_incompatible_outputs[fork_CancunEIP7692-eof_test-same_stack]\ntest_jumpf_incompatible_outputs[fork_CancunEIP7692-eof_test-more_stack]\ntest_jumpf_incompatible_outputs[fork_CancunEIP7692-eof_test-less_output]\ntest_jumpf_incompatible_outputs[fork_CancunEIP7692-eof_test-same_output]\ntest_jumpf_incompatible_outputs[fork_CancunEIP7692-eof_test-more_output]\ntest_jumpf_diff_max_stack_height[fork_CancunEIP7692-eof_test-less_stack]\ntest_jumpf_diff_max_stack_height[fork_CancunEIP7692-eof_test-same_stack]\ntest_jumpf_diff_max_stack_height[fork_CancunEIP7692-eof_test-more_stack]\ntest_jumpf_diff_max_stack_height[fork_CancunEIP7692-eof_test-less_output]\ntest_jumpf_diff_max_stack_height[fork_CancunEIP7692-eof_test-same_output]\ntest_jumpf_diff_max_stack_height[fork_CancunEIP7692-eof_test-more_output]\ntest_jumpf_diff_min_stack_height[fork_CancunEIP7692-eof_test-less_stack]\ntest_jumpf_diff_min_stack_height[fork_CancunEIP7692-eof_test-same_stack]\ntest_jumpf_diff_min_stack_height[fork_CancunEIP7692-eof_test-more_stack]\ntest_jumpf_diff_min_stack_height[fork_CancunEIP7692-eof_test-less_output]\ntest_jumpf_diff_min_stack_height[fork_CancunEIP7692-eof_test-same_output]\ntest_jumpf_diff_min_stack_height[fork_CancunEIP7692-eof_test-more_output]\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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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
.
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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 EOFCREATE
s 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.
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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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 intests/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_set_code_tx/","title":"EIP-7702 Set Code Tx","text":"Documentation for tests/prague/eip7702_set_code_tx
.
Generate fixtures for these test cases for Prague with:
Prague only:
fill -v tests/prague/eip7702_set_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_set_code_tx --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n
Cross-client EIP-7702 Tests
"},{"location":"tests/prague/eip7702_set_code_tx/spec/","title":"Spec","text":"Documentation for tests/prague/eip7702_set_code_tx/spec.py
.
Defines EIP-7702 specification constants and functions.
"},{"location":"tests/prague/eip7702_set_code_tx/spec/#tests.prague.eip7702_set_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 intests/prague/eip7702_set_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 = 2_500\n PER_EMPTY_ACCOUNT_COST = 25_000\n DELEGATION_DESIGNATION = bytes.fromhex(\"ef0100\")\n\n @staticmethod\n def delegation_designation(address: Address) -> Bytes:\n \"\"\"\n Returns the delegation designation for the given address.\n \"\"\"\n return Bytes(Spec.DELEGATION_DESIGNATION + bytes(address))\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_gas/","title":"Test Gas","text":"Documentation for tests/prague/eip7702_set_code_tx/test_gas.py
.
Generate fixtures for these test cases for Prague with:
Prague only:
fill -v tests/prague/eip7702_set_code_tx/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/eip7702_set_code_tx/test_gas.py --until=Prague --evm-bin=/path/to/evm-tool-dev-version\n
Tests related to gas of set-code transactions from EIP-7702: Set EOA account code for one transaction Tests related to gas of set-code transactions from EIP-7702: Set EOA account code for one transaction.
"},{"location":"tests/prague/eip7702_set_code_tx/test_gas/#tests.prague.eip7702_set_code_tx.test_gas.test_gas_cost","title":"test_gas_cost(state_test, pre, authorization_list_with_properties, authorization_list, data, access_list, sender)
","text":"Test gas at the execution start of a set-code transaction in multiple scenarios.
Source code intests/prague/eip7702_set_code_tx/test_gas.py
@pytest.mark.parametrize(**gas_test_parameter_args(include_pre_authorized=False))\ndef test_gas_cost(\n state_test: StateTestFiller,\n pre: Alloc,\n authorization_list_with_properties: List[AuthorizationWithProperties],\n authorization_list: List[AuthorizationTuple],\n data: bytes,\n access_list: List[AccessList],\n sender: EOA,\n):\n \"\"\"\n Test gas at the execution start of a set-code transaction in multiple scenarios.\n \"\"\"\n intrinsic_gas = (\n 21_000\n + eip_2028_transaction_data_cost(data)\n + 1900 * sum(len(al.storage_keys) for al in access_list)\n + 2400 * len(access_list)\n )\n # Calculate the intrinsic gas cost of the authorizations, by default the\n # full empty account cost is charged for each authorization.\n intrinsic_gas += Spec.PER_EMPTY_ACCOUNT_COST * len(authorization_list_with_properties)\n\n discounted_authorizations = 0\n seen_authority = set()\n for authorization_with_properties in authorization_list_with_properties:\n if authorization_with_properties.invalidity_type is None:\n authority = authorization_with_properties.tuple.signer\n if not authorization_with_properties.empty:\n seen_authority.add(authority)\n if authority in seen_authority:\n discounted_authorizations += 1\n else:\n seen_authority.add(authority)\n\n discount_gas = (\n Spec.PER_EMPTY_ACCOUNT_COST - Spec.PER_AUTH_BASE_COST\n ) * discounted_authorizations\n\n # We calculate the exact gas required to execute the test code.\n # We add SSTORE opcodes in order to make sure that the refund is less than one fifth (EIP-3529)\n # of the total gas used, so we can see the full discount being reflected in most of the tests.\n gas_opcode_cost = 2\n sstore_opcode_count = 10\n push_opcode_count = (2 * (sstore_opcode_count)) - 1\n push_opcode_cost = 3 * push_opcode_count\n sstore_opcode_cost = 20_000 * sstore_opcode_count\n cold_storage_cost = 2_100 * sstore_opcode_count\n\n execution_gas = gas_opcode_cost + push_opcode_cost + sstore_opcode_cost + cold_storage_cost\n\n # The first opcode that executes in the code is the GAS opcode, which costs 2 gas, so we\n # subtract that from the expected gas measure.\n expected_gas_measure = execution_gas - gas_opcode_cost\n\n test_code_storage = Storage()\n test_code = (\n Op.SSTORE(test_code_storage.store_next(expected_gas_measure), Op.GAS)\n + sum(\n Op.SSTORE(test_code_storage.store_next(1), 1) for _ in range(sstore_opcode_count - 1)\n )\n + Op.STOP\n )\n test_code_address = pre.deploy_contract(test_code)\n\n tx_gas_limit = intrinsic_gas + execution_gas\n tx_max_fee_per_gas = 7\n tx_exact_cost = tx_gas_limit * tx_max_fee_per_gas\n\n # EIP-3529\n max_discount = tx_gas_limit // 5\n\n if discount_gas > max_discount:\n # Only one test hits this condition, but it's ok to also test this case.\n discount_gas = max_discount\n\n discount_cost = discount_gas * tx_max_fee_per_gas\n\n sender_account = pre[sender]\n assert sender_account is not None\n\n tx = Transaction(\n gas_limit=tx_gas_limit,\n max_fee_per_gas=tx_max_fee_per_gas,\n to=test_code_address,\n value=0,\n data=data,\n authorization_list=authorization_list,\n access_list=access_list,\n sender=sender,\n )\n\n state_test(\n env=Environment(gas_limit=max(tx_gas_limit, 30_000_000)),\n pre=pre,\n tx=tx,\n post={\n test_code_address: Account(storage=test_code_storage),\n sender: Account(balance=sender_account.balance - tx_exact_cost + discount_cost),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_gas/#tests.prague.eip7702_set_code_tx.test_gas.test_account_warming","title":"test_account_warming(state_test, pre, authorization_list_with_properties, authorization_list, access_list_case, access_list, data, sender, check_delegated_account_first)
","text":"Test warming of the authority and authorized accounts for set-code transactions.
Source code intests/prague/eip7702_set_code_tx/test_gas.py
@pytest.mark.parametrize(\"check_delegated_account_first\", [True, False])\n@pytest.mark.parametrize(**gas_test_parameter_args(include_many=False, include_data=False))\ndef test_account_warming(\n state_test: StateTestFiller,\n pre: Alloc,\n authorization_list_with_properties: List[AuthorizationWithProperties],\n authorization_list: List[AuthorizationTuple],\n access_list_case: AccessListType,\n access_list: List[AccessList],\n data: bytes,\n sender: EOA,\n check_delegated_account_first: bool,\n):\n \"\"\"\n Test warming of the authority and authorized accounts for set-code transactions.\n \"\"\"\n # Overhead cost is the single push operation required for the address to check.\n OVERHEAD_COST = 3\n\n COLD_ACCOUNT_COST = 2600\n WARM_ACCOUNT_COST = 100\n\n # Dictionary to keep track of the addresses to check for warming, and the expected cost of\n # accessing such account.\n addresses_to_check: Dict[Address, int] = {}\n\n for authorization_with_properties in authorization_list_with_properties:\n authority = authorization_with_properties.tuple.signer\n assert authority is not None, \"authority address is not set\"\n delegated_account = authorization_with_properties.tuple.address\n\n if check_delegated_account_first:\n if delegated_account not in addresses_to_check:\n addresses_to_check[delegated_account] = (\n WARM_ACCOUNT_COST\n if access_list_case.contains_set_code_address()\n else COLD_ACCOUNT_COST\n )\n\n if authority not in addresses_to_check:\n if not authorization_with_properties.skip:\n if (\n authorization_with_properties.invalidity_type is None\n or (\n authorization_with_properties.invalidity_type\n != AuthorizationInvalidityType.INVALID_CHAIN_ID\n )\n or access_list_case.contains_authority()\n ):\n access_cost = WARM_ACCOUNT_COST\n else:\n access_cost = COLD_ACCOUNT_COST\n if authorization_with_properties.invalidity_type is None:\n access_cost += WARM_ACCOUNT_COST\n else:\n access_cost = (\n COLD_ACCOUNT_COST\n if Address(sender) != authorization_with_properties.tuple.signer\n else WARM_ACCOUNT_COST\n )\n if authorization_with_properties.invalidity_type is None:\n access_cost += WARM_ACCOUNT_COST\n\n addresses_to_check[authority] = access_cost\n\n else:\n if authority not in addresses_to_check:\n access_cost = (\n COLD_ACCOUNT_COST\n if Address(sender) != authorization_with_properties.tuple.signer\n else WARM_ACCOUNT_COST\n )\n if not authorization_with_properties.skip and (\n authorization_with_properties.invalidity_type is None\n or (\n authorization_with_properties.invalidity_type\n != AuthorizationInvalidityType.INVALID_CHAIN_ID\n )\n or access_list_case.contains_authority()\n ):\n access_cost = WARM_ACCOUNT_COST\n\n if (\n # We can only charge the delegated account access cost if the authorization\n # went through\n authorization_with_properties.invalidity_type\n is None\n ):\n if (\n delegated_account in addresses_to_check\n or access_list_case.contains_set_code_address()\n ):\n access_cost += WARM_ACCOUNT_COST\n else:\n access_cost += COLD_ACCOUNT_COST\n\n addresses_to_check[authority] = access_cost\n\n if delegated_account not in addresses_to_check:\n if (\n authorization_with_properties.invalidity_type is None\n or access_list_case.contains_set_code_address()\n ):\n access_cost = WARM_ACCOUNT_COST\n else:\n access_cost = COLD_ACCOUNT_COST\n addresses_to_check[delegated_account] = access_cost\n\n callee_storage = Storage()\n callee_code: Bytecode = sum( # type: ignore\n (\n CodeGasMeasure(\n code=Op.EXTCODESIZE(check_address),\n overhead_cost=OVERHEAD_COST,\n extra_stack_items=1,\n sstore_key=callee_storage.store_next(access_cost),\n stop=False,\n )\n for check_address, access_cost in addresses_to_check.items()\n )\n )\n callee_code += Op.STOP\n callee_address = pre.deploy_contract(callee_code, storage=callee_storage.canary())\n\n tx = Transaction(\n gas_limit=1_000_000,\n to=callee_address,\n authorization_list=authorization_list if authorization_list else None,\n access_list=access_list,\n sender=sender,\n data=data,\n )\n post = {\n callee_address: Account(\n storage=callee_storage,\n ),\n }\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post=post,\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_gas/#tests.prague.eip7702_set_code_tx.test_gas.test_intrinsic_gas_cost","title":"test_intrinsic_gas_cost(state_test, pre, authorization_list, data, access_list, sender, valid)
","text":"Test sending a transaction with the exact intrinsic gas required and also insufficient gas.
Source code intests/prague/eip7702_set_code_tx/test_gas.py
@pytest.mark.parametrize(**gas_test_parameter_args(include_pre_authorized=False))\n@pytest.mark.parametrize(\n \"valid\",\n [True, False],\n)\ndef test_intrinsic_gas_cost(\n state_test: StateTestFiller,\n pre: Alloc,\n authorization_list: List[AuthorizationTuple],\n data: bytes,\n access_list: List[AccessList],\n sender: EOA,\n valid: bool,\n):\n \"\"\"\n Test sending a transaction with the exact intrinsic gas required and also insufficient\n gas.\n \"\"\"\n intrinsic_gas = (\n 21_000\n + eip_2028_transaction_data_cost(data)\n + 1900 * sum(len(al.storage_keys) for al in access_list)\n + 2400 * len(access_list)\n )\n # Calculate the intrinsic gas cost of the authorizations, by default the\n # full empty account cost is charged for each authorization.\n intrinsic_gas += Spec.PER_EMPTY_ACCOUNT_COST * len(authorization_list)\n\n tx_gas = intrinsic_gas\n if not valid:\n tx_gas -= 1\n\n test_code = Op.STOP\n test_code_address = pre.deploy_contract(test_code)\n\n tx = Transaction(\n gas_limit=tx_gas,\n to=test_code_address,\n value=0,\n data=data,\n authorization_list=authorization_list,\n access_list=access_list,\n sender=sender,\n error=TransactionException.INTRINSIC_GAS_TOO_LOW if not valid else None,\n )\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post={},\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_gas/#tests.prague.eip7702_set_code_tx.test_gas.test_self_set_code_cost","title":"test_self_set_code_cost(state_test, pre, pre_authorized)
","text":"Test set to code account access cost when it delegates to itself.
Source code intests/prague/eip7702_set_code_tx/test_gas.py
@pytest.mark.parametrize(\"pre_authorized\", [True, False])\ndef test_self_set_code_cost(\n state_test: StateTestFiller,\n pre: Alloc,\n pre_authorized: bool,\n):\n \"\"\"\n Test set to code account access cost when it delegates to itself.\n \"\"\"\n if pre_authorized:\n auth_signer = pre.fund_eoa(0, delegation=\"Self\")\n else:\n auth_signer = pre.fund_eoa(0)\n\n slot_call_cost = 1\n\n OVERHEAD_COST = 3\n\n callee_code = CodeGasMeasure(\n code=Op.EXTCODESIZE(address=auth_signer),\n overhead_cost=OVERHEAD_COST,\n extra_stack_items=1,\n sstore_key=slot_call_cost,\n )\n\n callee_address = pre.deploy_contract(callee_code)\n callee_storage = Storage()\n callee_storage[slot_call_cost] = 200 if not pre_authorized else 2700\n\n tx = Transaction(\n gas_limit=1_000_000,\n to=callee_address,\n authorization_list=[\n AuthorizationTuple(\n address=auth_signer,\n nonce=0,\n signer=auth_signer,\n ),\n ]\n if not pre_authorized\n else None,\n sender=pre.fund_eoa(),\n )\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post={\n callee_address: Account(storage=callee_storage),\n auth_signer: Account(\n nonce=1,\n code=Spec.delegation_designation(auth_signer),\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_gas/index/test_cases/","title":"Test Gas - Test Cases","text":"Test cases generated from tests/prague/eip7702_set_code_tx/test_gas.py
Parametrized test cases generated from the test module tests/prague/eip7702_set_code_tx/test_gas.py
:
test_gas_cost[fork_Prague-blockchain_test-single_valid_authorization_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_chain_specific_authorization_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test-multiple_valid_authorizations_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test-single_invalid_nonce_authorization_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test-single_invalid_authorization_invalid_chain_id_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test-multiple_invalid_nonce_authorizations_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test-multiple_invalid_nonce_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-blockchain_test-multiple_invalid_chain_id_authorizations_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test-multiple_valid_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-blockchain_test-first_valid_then_single_repeated_nonce_authorization]\ntest_gas_cost[fork_Prague-blockchain_test-first_valid_then_single_repeated_nonce_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_authorization_to_eoa]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_authorization_to_contract]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_authorization_with_authority_in_access_list]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_authorization_with_set_code_address_in_access_list]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_authorization_with_authority_and_set_code_address_in_access_list]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_authorization_eoa_authority]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_re_authorization_eoa_authority]\ntest_gas_cost[fork_Prague-blockchain_test-multiple_valid_authorizations_eoa_authority]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_authorization_eoa_self_sponsored_authority]\ntest_gas_cost[fork_Prague-blockchain_test-multiple_valid_authorizations_eoa_self_sponsored_authority]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_authorization_invalid_contract_authority]\ntest_gas_cost[fork_Prague-blockchain_test-multiple_authorizations_empty_account_then_contract_authority]\ntest_gas_cost[fork_Prague-blockchain_test-multiple_authorizations_eoa_then_contract_authority]\ntest_gas_cost[fork_Prague-blockchain_test-multiple_authorizations_eoa_self_sponsored_then_contract_authority]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_authorization_with_single_non_zero_byte_data]\ntest_gas_cost[fork_Prague-blockchain_test-single_valid_authorization_with_single_zero_byte_data]\ntest_gas_cost[fork_Prague-blockchain_test-many_valid_authorizations_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test-many_valid_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-blockchain_test-first_valid_then_many_duplicate_authorizations]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_authorization_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_chain_specific_authorization_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_invalid_nonce_authorization_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_invalid_authorization_invalid_chain_id_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test_engine-multiple_invalid_nonce_authorizations_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test_engine-multiple_invalid_nonce_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-blockchain_test_engine-multiple_invalid_chain_id_authorizations_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-blockchain_test_engine-first_valid_then_single_repeated_nonce_authorization]\ntest_gas_cost[fork_Prague-blockchain_test_engine-first_valid_then_single_repeated_nonce_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_authorization_to_eoa]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_authorization_to_contract]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_authorization_with_authority_in_access_list]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_authorization_with_set_code_address_in_access_list]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_authorization_with_authority_and_set_code_address_in_access_list]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_authorization_eoa_authority]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_re_authorization_eoa_authority]\ntest_gas_cost[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_eoa_authority]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_authorization_eoa_self_sponsored_authority]\ntest_gas_cost[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_eoa_self_sponsored_authority]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_authorization_invalid_contract_authority]\ntest_gas_cost[fork_Prague-blockchain_test_engine-multiple_authorizations_empty_account_then_contract_authority]\ntest_gas_cost[fork_Prague-blockchain_test_engine-multiple_authorizations_eoa_then_contract_authority]\ntest_gas_cost[fork_Prague-blockchain_test_engine-multiple_authorizations_eoa_self_sponsored_then_contract_authority]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_authorization_with_single_non_zero_byte_data]\ntest_gas_cost[fork_Prague-blockchain_test_engine-single_valid_authorization_with_single_zero_byte_data]\ntest_gas_cost[fork_Prague-blockchain_test_engine-many_valid_authorizations_single_signer]\ntest_gas_cost[fork_Prague-blockchain_test_engine-many_valid_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-blockchain_test_engine-first_valid_then_many_duplicate_authorizations]\ntest_gas_cost[fork_Prague-state_test-single_valid_authorization_single_signer]\ntest_gas_cost[fork_Prague-state_test-single_valid_chain_specific_authorization_single_signer]\ntest_gas_cost[fork_Prague-state_test-multiple_valid_authorizations_single_signer]\ntest_gas_cost[fork_Prague-state_test-single_invalid_nonce_authorization_single_signer]\ntest_gas_cost[fork_Prague-state_test-single_invalid_authorization_invalid_chain_id_single_signer]\ntest_gas_cost[fork_Prague-state_test-multiple_invalid_nonce_authorizations_single_signer]\ntest_gas_cost[fork_Prague-state_test-multiple_invalid_nonce_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-state_test-multiple_invalid_chain_id_authorizations_single_signer]\ntest_gas_cost[fork_Prague-state_test-multiple_valid_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-state_test-first_valid_then_single_repeated_nonce_authorization]\ntest_gas_cost[fork_Prague-state_test-first_valid_then_single_repeated_nonce_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-state_test-single_valid_authorization_to_eoa]\ntest_gas_cost[fork_Prague-state_test-single_valid_authorization_to_contract]\ntest_gas_cost[fork_Prague-state_test-single_valid_authorization_with_authority_in_access_list]\ntest_gas_cost[fork_Prague-state_test-single_valid_authorization_with_set_code_address_in_access_list]\ntest_gas_cost[fork_Prague-state_test-single_valid_authorization_with_authority_and_set_code_address_in_access_list]\ntest_gas_cost[fork_Prague-state_test-single_valid_authorization_eoa_authority]\ntest_gas_cost[fork_Prague-state_test-single_valid_re_authorization_eoa_authority]\ntest_gas_cost[fork_Prague-state_test-multiple_valid_authorizations_eoa_authority]\ntest_gas_cost[fork_Prague-state_test-single_valid_authorization_eoa_self_sponsored_authority]\ntest_gas_cost[fork_Prague-state_test-multiple_valid_authorizations_eoa_self_sponsored_authority]\ntest_gas_cost[fork_Prague-state_test-single_valid_authorization_invalid_contract_authority]\ntest_gas_cost[fork_Prague-state_test-multiple_authorizations_empty_account_then_contract_authority]\ntest_gas_cost[fork_Prague-state_test-multiple_authorizations_eoa_then_contract_authority]\ntest_gas_cost[fork_Prague-state_test-multiple_authorizations_eoa_self_sponsored_then_contract_authority]\ntest_gas_cost[fork_Prague-state_test-single_valid_authorization_with_single_non_zero_byte_data]\ntest_gas_cost[fork_Prague-state_test-single_valid_authorization_with_single_zero_byte_data]\ntest_gas_cost[fork_Prague-state_test-many_valid_authorizations_single_signer]\ntest_gas_cost[fork_Prague-state_test-many_valid_authorizations_multiple_signers]\ntest_gas_cost[fork_Prague-state_test-first_valid_then_many_duplicate_authorizations]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_chain_specific_authorization_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_chain_specific_authorization_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-multiple_valid_authorizations_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-multiple_valid_authorizations_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_invalid_nonce_authorization_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_invalid_nonce_authorization_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_invalid_authorization_invalid_chain_id_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_invalid_authorization_invalid_chain_id_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-multiple_invalid_nonce_authorizations_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-multiple_invalid_nonce_authorizations_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-multiple_invalid_nonce_authorizations_multiple_signers-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-multiple_invalid_nonce_authorizations_multiple_signers-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-multiple_invalid_chain_id_authorizations_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-multiple_invalid_chain_id_authorizations_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-multiple_valid_authorizations_multiple_signers-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-multiple_valid_authorizations_multiple_signers-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-first_valid_then_single_repeated_nonce_authorization-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-first_valid_then_single_repeated_nonce_authorization-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-first_valid_then_single_repeated_nonce_authorizations_multiple_signers-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-first_valid_then_single_repeated_nonce_authorizations_multiple_signers-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_to_eoa-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_to_eoa-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_to_contract-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_to_contract-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_with_authority_in_access_list-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_with_authority_in_access_list-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_with_set_code_address_in_access_list-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_with_set_code_address_in_access_list-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_with_authority_and_set_code_address_in_access_list-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_with_authority_and_set_code_address_in_access_list-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_eoa_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_eoa_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_re_authorization_eoa_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_re_authorization_eoa_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-multiple_valid_authorizations_eoa_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-multiple_valid_authorizations_eoa_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_eoa_self_sponsored_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_eoa_self_sponsored_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-multiple_valid_authorizations_eoa_self_sponsored_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-multiple_valid_authorizations_eoa_self_sponsored_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_invalid_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-single_valid_authorization_invalid_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-multiple_authorizations_empty_account_then_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-multiple_authorizations_empty_account_then_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-multiple_authorizations_eoa_then_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-multiple_authorizations_eoa_then_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-multiple_authorizations_eoa_self_sponsored_then_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-multiple_authorizations_eoa_self_sponsored_then_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-pre_authorized_eoa_authority_no_re_authorization-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-pre_authorized_eoa_authority_no_re_authorization-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test-pre_authorized_eoa_authority_no_re_authorization_self_sponsored-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test-pre_authorized_eoa_authority_no_re_authorization_self_sponsored-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_chain_specific_authorization_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_chain_specific_authorization_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_invalid_nonce_authorization_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_invalid_nonce_authorization_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_invalid_authorization_invalid_chain_id_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_invalid_authorization_invalid_chain_id_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_invalid_nonce_authorizations_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_invalid_nonce_authorizations_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_invalid_nonce_authorizations_multiple_signers-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_invalid_nonce_authorizations_multiple_signers-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_invalid_chain_id_authorizations_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_invalid_chain_id_authorizations_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_multiple_signers-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_multiple_signers-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-first_valid_then_single_repeated_nonce_authorization-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-first_valid_then_single_repeated_nonce_authorization-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-first_valid_then_single_repeated_nonce_authorizations_multiple_signers-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-first_valid_then_single_repeated_nonce_authorizations_multiple_signers-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_to_eoa-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_to_eoa-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_to_contract-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_to_contract-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_with_authority_in_access_list-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_with_authority_in_access_list-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_with_set_code_address_in_access_list-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_with_set_code_address_in_access_list-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_with_authority_and_set_code_address_in_access_list-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_with_authority_and_set_code_address_in_access_list-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_eoa_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_eoa_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_re_authorization_eoa_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_re_authorization_eoa_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_eoa_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_eoa_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_eoa_self_sponsored_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_eoa_self_sponsored_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_eoa_self_sponsored_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_valid_authorizations_eoa_self_sponsored_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_invalid_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-single_valid_authorization_invalid_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_authorizations_empty_account_then_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_authorizations_empty_account_then_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_authorizations_eoa_then_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_authorizations_eoa_then_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_authorizations_eoa_self_sponsored_then_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-multiple_authorizations_eoa_self_sponsored_then_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-pre_authorized_eoa_authority_no_re_authorization-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-pre_authorized_eoa_authority_no_re_authorization-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-blockchain_test_engine-pre_authorized_eoa_authority_no_re_authorization_self_sponsored-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-blockchain_test_engine-pre_authorized_eoa_authority_no_re_authorization_self_sponsored-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_valid_chain_specific_authorization_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_valid_chain_specific_authorization_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-multiple_valid_authorizations_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-multiple_valid_authorizations_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_invalid_nonce_authorization_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_invalid_nonce_authorization_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_invalid_authorization_invalid_chain_id_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_invalid_authorization_invalid_chain_id_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-multiple_invalid_nonce_authorizations_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-multiple_invalid_nonce_authorizations_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-multiple_invalid_nonce_authorizations_multiple_signers-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-multiple_invalid_nonce_authorizations_multiple_signers-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-multiple_invalid_chain_id_authorizations_single_signer-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-multiple_invalid_chain_id_authorizations_single_signer-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-multiple_valid_authorizations_multiple_signers-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-multiple_valid_authorizations_multiple_signers-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-first_valid_then_single_repeated_nonce_authorization-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-first_valid_then_single_repeated_nonce_authorization-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-first_valid_then_single_repeated_nonce_authorizations_multiple_signers-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-first_valid_then_single_repeated_nonce_authorizations_multiple_signers-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_to_eoa-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_to_eoa-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_to_contract-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_to_contract-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_with_authority_in_access_list-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_with_authority_in_access_list-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_with_set_code_address_in_access_list-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_with_set_code_address_in_access_list-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_with_authority_and_set_code_address_in_access_list-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_with_authority_and_set_code_address_in_access_list-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_eoa_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_eoa_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_valid_re_authorization_eoa_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_valid_re_authorization_eoa_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-multiple_valid_authorizations_eoa_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-multiple_valid_authorizations_eoa_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_eoa_self_sponsored_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_eoa_self_sponsored_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-multiple_valid_authorizations_eoa_self_sponsored_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-multiple_valid_authorizations_eoa_self_sponsored_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_invalid_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-single_valid_authorization_invalid_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-multiple_authorizations_empty_account_then_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-multiple_authorizations_empty_account_then_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-multiple_authorizations_eoa_then_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-multiple_authorizations_eoa_then_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-multiple_authorizations_eoa_self_sponsored_then_contract_authority-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-multiple_authorizations_eoa_self_sponsored_then_contract_authority-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-pre_authorized_eoa_authority_no_re_authorization-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-pre_authorized_eoa_authority_no_re_authorization-check_delegated_account_first_False]\ntest_account_warming[fork_Prague-state_test-pre_authorized_eoa_authority_no_re_authorization_self_sponsored-check_delegated_account_first_True]\ntest_account_warming[fork_Prague-state_test-pre_authorized_eoa_authority_no_re_authorization_self_sponsored-check_delegated_account_first_False]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_chain_specific_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-multiple_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_invalid_nonce_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_invalid_authorization_invalid_chain_id_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-multiple_invalid_nonce_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-multiple_invalid_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-multiple_invalid_chain_id_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-multiple_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-first_valid_then_single_repeated_nonce_authorization]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-first_valid_then_single_repeated_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_authorization_to_eoa]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_authorization_to_contract]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_authorization_with_authority_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_authorization_with_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_authorization_with_authority_and_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_re_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-multiple_valid_authorizations_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_authorization_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-multiple_valid_authorizations_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_authorization_invalid_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-multiple_authorizations_empty_account_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-multiple_authorizations_eoa_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-multiple_authorizations_eoa_self_sponsored_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_authorization_with_single_non_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-single_valid_authorization_with_single_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-many_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-many_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_True-first_valid_then_many_duplicate_authorizations]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_chain_specific_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-multiple_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_invalid_nonce_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_invalid_authorization_invalid_chain_id_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-multiple_invalid_nonce_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-multiple_invalid_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-multiple_invalid_chain_id_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-multiple_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-first_valid_then_single_repeated_nonce_authorization]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-first_valid_then_single_repeated_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_authorization_to_eoa]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_authorization_to_contract]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_authorization_with_authority_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_authorization_with_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_authorization_with_authority_and_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_re_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-multiple_valid_authorizations_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_authorization_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-multiple_valid_authorizations_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_authorization_invalid_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-multiple_authorizations_empty_account_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-multiple_authorizations_eoa_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-multiple_authorizations_eoa_self_sponsored_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_authorization_with_single_non_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-single_valid_authorization_with_single_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-many_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-many_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test-valid_False-first_valid_then_many_duplicate_authorizations]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_chain_specific_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-multiple_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_invalid_nonce_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_invalid_authorization_invalid_chain_id_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-multiple_invalid_nonce_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-multiple_invalid_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-multiple_invalid_chain_id_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-multiple_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-first_valid_then_single_repeated_nonce_authorization]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-first_valid_then_single_repeated_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_authorization_to_eoa]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_authorization_to_contract]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_authorization_with_authority_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_authorization_with_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_authorization_with_authority_and_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_re_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-multiple_valid_authorizations_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_authorization_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-multiple_valid_authorizations_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_authorization_invalid_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-multiple_authorizations_empty_account_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-multiple_authorizations_eoa_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-multiple_authorizations_eoa_self_sponsored_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_authorization_with_single_non_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-single_valid_authorization_with_single_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-many_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-many_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_True-first_valid_then_many_duplicate_authorizations]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_chain_specific_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-multiple_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_invalid_nonce_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_invalid_authorization_invalid_chain_id_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-multiple_invalid_nonce_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-multiple_invalid_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-multiple_invalid_chain_id_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-multiple_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-first_valid_then_single_repeated_nonce_authorization]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-first_valid_then_single_repeated_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_authorization_to_eoa]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_authorization_to_contract]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_authorization_with_authority_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_authorization_with_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_authorization_with_authority_and_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_re_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-multiple_valid_authorizations_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_authorization_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-multiple_valid_authorizations_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_authorization_invalid_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-multiple_authorizations_empty_account_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-multiple_authorizations_eoa_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-multiple_authorizations_eoa_self_sponsored_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_authorization_with_single_non_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-single_valid_authorization_with_single_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-many_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-many_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-blockchain_test_engine-valid_False-first_valid_then_many_duplicate_authorizations]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_chain_specific_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-multiple_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_invalid_nonce_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_invalid_authorization_invalid_chain_id_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-multiple_invalid_nonce_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-multiple_invalid_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-multiple_invalid_chain_id_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-multiple_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-first_valid_then_single_repeated_nonce_authorization]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-first_valid_then_single_repeated_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_authorization_to_eoa]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_authorization_to_contract]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_authorization_with_authority_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_authorization_with_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_authorization_with_authority_and_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_re_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-multiple_valid_authorizations_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_authorization_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-multiple_valid_authorizations_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_authorization_invalid_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-multiple_authorizations_empty_account_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-multiple_authorizations_eoa_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-multiple_authorizations_eoa_self_sponsored_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_authorization_with_single_non_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-single_valid_authorization_with_single_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-many_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-many_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_True-first_valid_then_many_duplicate_authorizations]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_chain_specific_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-multiple_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_invalid_nonce_authorization_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_invalid_authorization_invalid_chain_id_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-multiple_invalid_nonce_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-multiple_invalid_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-multiple_invalid_chain_id_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-multiple_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-first_valid_then_single_repeated_nonce_authorization]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-first_valid_then_single_repeated_nonce_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_authorization_to_eoa]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_authorization_to_contract]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_authorization_with_authority_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_authorization_with_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_authorization_with_authority_and_set_code_address_in_access_list]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_re_authorization_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-multiple_valid_authorizations_eoa_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_authorization_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-multiple_valid_authorizations_eoa_self_sponsored_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_authorization_invalid_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-multiple_authorizations_empty_account_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-multiple_authorizations_eoa_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-multiple_authorizations_eoa_self_sponsored_then_contract_authority]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_authorization_with_single_non_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-single_valid_authorization_with_single_zero_byte_data]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-many_valid_authorizations_single_signer]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-many_valid_authorizations_multiple_signers]\ntest_intrinsic_gas_cost[fork_Prague-state_test-valid_False-first_valid_then_many_duplicate_authorizations]\ntest_self_set_code_cost[fork_Prague-blockchain_test-pre_authorized_True]\ntest_self_set_code_cost[fork_Prague-blockchain_test-pre_authorized_False]\ntest_self_set_code_cost[fork_Prague-blockchain_test_engine-pre_authorized_True]\ntest_self_set_code_cost[fork_Prague-blockchain_test_engine-pre_authorized_False]\ntest_self_set_code_cost[fork_Prague-state_test-pre_authorized_True]\ntest_self_set_code_cost[fork_Prague-state_test-pre_authorized_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/prague/eip7702_set_code_tx/test_gas.py\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/","title":"Test Set Code Txs","text":"Documentation for tests/prague/eip7702_set_code_tx/test_set_code_txs.py
.
Generate fixtures for these test cases for Prague with:
Prague only:
fill -v tests/prague/eip7702_set_code_tx/test_set_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_set_code_tx/test_set_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_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_self_sponsored_set_code","title":"test_self_sponsored_set_code(state_test, pre, suffix, succeeds, tx_value)
","text":"Test the executing a self-sponsored set-code transaction.
The transaction is sent to the sender, and the sender is the signer of the only authorization tuple in the authorization list.
The authorization tuple has a nonce of 1 because the self-sponsored transaction increases the nonce of the sender from zero to one first.
The expected nonce at the end of the transaction is 2.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"tx_value\",\n [0, 1],\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 pytest.param(Om.OOG, False, id=\"out-of-gas\"),\n ],\n)\ndef test_self_sponsored_set_code(\n state_test: StateTestFiller,\n pre: Alloc,\n suffix: Bytecode,\n succeeds: bool,\n tx_value: int,\n):\n \"\"\"\n Test the executing a self-sponsored set-code transaction.\n\n The transaction is sent to the sender, and the sender is the signer of the only authorization\n tuple in the authorization list.\n\n The authorization tuple has a nonce of 1 because the self-sponsored transaction increases the\n nonce of the sender from zero to one first.\n\n The expected nonce at the end of the transaction is 2.\n \"\"\"\n storage = Storage()\n sender = pre.fund_eoa()\n\n set_code = (\n Op.SSTORE(storage.store_next(sender), Op.ORIGIN)\n + Op.SSTORE(storage.store_next(sender), Op.CALLER)\n + Op.SSTORE(storage.store_next(tx_value), Op.CALLVALUE)\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=sender,\n value=tx_value,\n authorization_list=[\n AuthorizationTuple(\n address=set_code_to_address,\n nonce=1,\n signer=sender,\n ),\n ],\n sender=sender,\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 sender: Account(\n nonce=2,\n code=Spec.delegation_designation(set_code_to_address),\n storage=storage if succeeds else {},\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_to_sstore","title":"test_set_code_to_sstore(state_test, pre, suffix, succeeds, tx_value, eoa_balance, self_sponsored)
","text":"Test the executing a simple SSTORE in a set-code transaction.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"eoa_balance,self_sponsored\",\n [\n pytest.param(0, False, id=\"zero_balance_authority\"),\n pytest.param(1, False, id=\"one_wei_balance_authority\"),\n pytest.param(None, True, id=\"self_sponsored_tx\"),\n ],\n)\n@pytest.mark.parametrize(\n \"tx_value\",\n [0, 1],\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(0, 0), False, id=\"revert\"),\n pytest.param(Op.INVALID, False, id=\"invalid\"),\n pytest.param(Om.OOG + Op.STOP, False, id=\"out-of-gas\"),\n ],\n)\ndef test_set_code_to_sstore(\n state_test: StateTestFiller,\n pre: Alloc,\n suffix: Bytecode,\n succeeds: bool,\n tx_value: int,\n eoa_balance: int,\n self_sponsored: bool,\n):\n \"\"\"\n Test the executing a simple SSTORE in a set-code transaction.\n \"\"\"\n storage = Storage()\n if self_sponsored:\n sender = pre.fund_eoa()\n auth_signer = sender\n else:\n auth_signer = pre.fund_eoa(eoa_balance)\n sender = pre.fund_eoa()\n\n set_code = (\n Op.SSTORE(storage.store_next(sender), Op.ORIGIN)\n + Op.SSTORE(storage.store_next(sender), Op.CALLER)\n + Op.SSTORE(storage.store_next(tx_value), Op.CALLVALUE)\n + suffix\n )\n set_code_to_address = pre.deploy_contract(\n set_code,\n )\n\n tx = Transaction(\n gas_limit=500_000,\n to=auth_signer,\n value=tx_value,\n authorization_list=[\n AuthorizationTuple(\n address=set_code_to_address,\n nonce=1 if self_sponsored else 0,\n signer=auth_signer,\n ),\n ],\n sender=sender,\n )\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post={\n set_code_to_address: Account(\n storage={k: 0 for k in storage},\n ),\n auth_signer: Account(\n nonce=2 if self_sponsored else 1,\n code=Spec.delegation_designation(set_code_to_address),\n storage=storage if succeeds else {},\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_to_zero_address","title":"test_set_code_to_zero_address(state_test, pre)
","text":"Test setting the code to the zero address (0x0) in a set-code transaction.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
def test_set_code_to_zero_address(\n state_test: StateTestFiller,\n pre: Alloc,\n):\n \"\"\"\n Test setting the code to the zero address (0x0) in a set-code transaction.\n \"\"\"\n auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n tx = Transaction(\n gas_limit=500_000,\n to=auth_signer,\n authorization_list=[\n AuthorizationTuple(\n address=Address(0),\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(\n nonce=1,\n code=Spec.delegation_designation(Address(0)),\n storage={},\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_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 intests/prague/eip7702_set_code_tx/test_set_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=100_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=100_000,\n to=auth_signer,\n value=0,\n authorization_list=[\n AuthorizationTuple(\n address=set_code_2_address,\n nonce=1,\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=2,\n code=Spec.delegation_designation(set_code_2_address),\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_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_to_tstore_reentry","title":"test_set_code_to_tstore_reentry(state_test, pre, call_opcode, return_opcode, evm_code_type)
","text":"Test the executing a simple TSTORE in a set-code transaction, which also performs a re-entry to TLOAD the value.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"return_opcode\",\n [\n Op.RETURN,\n Op.REVERT,\n ],\n)\n@pytest.mark.with_all_call_opcodes\ndef test_set_code_to_tstore_reentry(\n state_test: StateTestFiller,\n pre: Alloc,\n call_opcode: Op,\n return_opcode: Op,\n evm_code_type: EVMCodeType,\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 evm_code_type=evm_code_type,\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(\n nonce=1,\n code=Spec.delegation_designation(set_code_to_address),\n storage={2: tload_value},\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_to_self_destruct","title":"test_set_code_to_self_destruct(state_test, pre, external_sendall_recipient, balance)
","text":"Test the executing self-destruct opcode in a set-code transaction.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"external_sendall_recipient\",\n [False, True],\n)\n@pytest.mark.parametrize(\n \"balance\",\n [0, 1],\n)\ndef test_set_code_to_self_destruct(\n state_test: StateTestFiller,\n pre: Alloc,\n external_sendall_recipient: bool,\n balance: int,\n):\n \"\"\"\n Test the executing self-destruct opcode in a set-code transaction.\n \"\"\"\n auth_signer = pre.fund_eoa(balance)\n if external_sendall_recipient:\n recipient = pre.fund_eoa(0)\n else:\n recipient = auth_signer\n\n set_code_to_address = pre.deploy_contract(Op.SSTORE(1, 1) + Op.SELFDESTRUCT(recipient))\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 post = {\n auth_signer: Account(\n nonce=1,\n code=Spec.delegation_designation(set_code_to_address),\n storage={1: 1},\n balance=balance if not external_sendall_recipient else 0,\n ),\n }\n\n if external_sendall_recipient and balance > 0:\n post[recipient] = Account(balance=balance)\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post=post,\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_to_contract_creator","title":"test_set_code_to_contract_creator(state_test, pre, create_opcode, evm_code_type)
","text":"Test the executing a contract-creating opcode in a set-code transaction.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.with_all_create_opcodes\ndef test_set_code_to_contract_creator(\n state_test: StateTestFiller,\n pre: Alloc,\n create_opcode: Op,\n evm_code_type: EVMCodeType,\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: Bytecode | Container = Op.STOP\n initcode: Bytecode | Container\n\n if evm_code_type == EVMCodeType.LEGACY:\n initcode = Initcode(deploy_code=deployed_code)\n elif evm_code_type == EVMCodeType.EOF_V1:\n deployed_code = Container.Code(deployed_code)\n initcode = Container.Init(deploy_container=deployed_code)\n else:\n raise ValueError(f\"Unsupported EVM code type: {evm_code_type}\")\n\n salt = 0\n\n deployed_contract_address = compute_create_address(\n address=auth_signer,\n nonce=1,\n salt=salt,\n initcode=initcode,\n opcode=create_opcode,\n )\n\n creator_code: Bytecode | Container\n if evm_code_type == EVMCodeType.LEGACY:\n creator_code = Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE(\n storage.store_next(deployed_contract_address),\n create_opcode(value=0, offset=0, size=Op.CALLDATASIZE, salt=salt),\n )\n elif evm_code_type == EVMCodeType.EOF_V1:\n creator_code = Container(\n sections=[\n Section.Code(\n code=Op.EOFCREATE[0](0, 0, 0, 0) + Op.STOP(),\n ),\n Section.Container(\n container=initcode,\n ),\n ]\n )\n else:\n raise ValueError(f\"Unsupported EVM code type: {evm_code_type}\")\n\n creator_code_address = pre.deploy_contract(creator_code)\n\n tx = Transaction(\n gas_limit=10_000_000,\n to=auth_signer,\n value=0,\n data=initcode if evm_code_type == EVMCodeType.LEGACY else b\"\",\n authorization_list=[\n AuthorizationTuple(\n address=creator_code_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 creator_code_address: Account(storage={}),\n auth_signer: Account(\n nonce=2,\n code=Spec.delegation_designation(creator_code_address),\n storage=storage,\n ),\n deployed_contract_address: Account(\n code=deployed_code,\n storage={},\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_to_self_caller","title":"test_set_code_to_self_caller(state_test, pre, call_opcode, value, evm_code_type)
","text":"Test the executing a self-call in a set-code transaction.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"value\",\n [0, 1],\n)\n@pytest.mark.with_all_call_opcodes\ndef test_set_code_to_self_caller(\n state_test: StateTestFiller,\n pre: Alloc,\n call_opcode: Op,\n value: int,\n evm_code_type: EVMCodeType,\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 static_call = call_opcode in [Op.STATICCALL, Op.EXTSTATICCALL]\n\n first_entry_slot = storage.store_next(True)\n re_entry_success_slot = storage.store_next(not static_call)\n re_entry_call_return_code_slot = storage.store_next(\n call_return_code(opcode=call_opcode, success=not static_call)\n )\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, call_opcode(address=auth_signer, value=value))\n + Op.STOP,\n if_false=Op.SSTORE(re_entry_success_slot, 1) + Op.STOP,\n evm_code_type=evm_code_type,\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(),\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=1,\n code=Spec.delegation_designation(set_code_to_address),\n storage=storage,\n balance=auth_account_start_balance + value,\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_call_set_code","title":"test_set_code_call_set_code(state_test, pre, call_opcode, value)
","text":"Test the calling a set-code account from another set-code account.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.with_all_call_opcodes\n@pytest.mark.parametrize(\n \"value\",\n [0, 1],\n)\ndef test_set_code_call_set_code(\n state_test: StateTestFiller,\n pre: Alloc,\n call_opcode: 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 static_call = call_opcode in [Op.STATICCALL, Op.EXTSTATICCALL]\n\n set_code_1_call_result_slot = storage_1.store_next(\n call_return_code(opcode=call_opcode, success=not static_call)\n )\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(not static_call)\n\n set_code_1 = (\n Op.SSTORE(set_code_1_call_result_slot, call_opcode(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(),\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=1,\n code=Spec.delegation_designation(set_code_to_address_1),\n storage=storage_1\n if call_opcode in [Op.CALL, Op.STATICCALL, Op.EXTCALL, Op.EXTSTATICCALL]\n else storage_1 + storage_2,\n balance=(0 if call_opcode in [Op.CALL, Op.EXTCALL] else value)\n + auth_account_start_balance,\n ),\n auth_signer_2: Account(\n nonce=1,\n code=Spec.delegation_designation(set_code_to_address_2),\n storage=storage_2 if call_opcode in [Op.CALL, Op.EXTCALL] else {},\n balance=(value if call_opcode in [Op.CALL, Op.EXTCALL] else 0)\n + auth_account_start_balance,\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_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 intests/prague/eip7702_set_code_tx/test_set_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(\n nonce=1,\n code=Spec.delegation_designation(set_code_to_address),\n storage=storage,\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_tx_into_self_delegating_set_code","title":"test_tx_into_self_delegating_set_code(state_test, pre)
","text":"Test a transaction that has entry-point into a set-code address that delegates to itself.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
def test_tx_into_self_delegating_set_code(\n state_test: StateTestFiller,\n pre: Alloc,\n):\n \"\"\"\n Test a transaction that has entry-point into a set-code address that delegates to itself.\n \"\"\"\n auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n tx = Transaction(\n gas_limit=10_000_000,\n to=auth_signer,\n value=0,\n authorization_list=[\n AuthorizationTuple(\n address=auth_signer,\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(\n nonce=1,\n code=Spec.delegation_designation(auth_signer),\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_tx_into_chain_delegating_set_code","title":"test_tx_into_chain_delegating_set_code(state_test, pre)
","text":"Test a transaction that has entry-point into a set-code address that delegates to itself.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
def test_tx_into_chain_delegating_set_code(\n state_test: StateTestFiller,\n pre: Alloc,\n):\n \"\"\"\n Test a transaction that has entry-point into a set-code address that delegates to itself.\n \"\"\"\n auth_signer_1 = pre.fund_eoa(auth_account_start_balance)\n auth_signer_2 = pre.fund_eoa(auth_account_start_balance)\n\n tx = Transaction(\n gas_limit=10_000_000,\n to=auth_signer_1,\n value=0,\n authorization_list=[\n AuthorizationTuple(\n address=auth_signer_2,\n nonce=0,\n signer=auth_signer_1,\n ),\n AuthorizationTuple(\n address=auth_signer_1,\n nonce=0,\n signer=auth_signer_2,\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_1: Account(nonce=1, code=Spec.delegation_designation(auth_signer_2)),\n auth_signer_2: Account(nonce=1, code=Spec.delegation_designation(auth_signer_1)),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_call_into_self_delegating_set_code","title":"test_call_into_self_delegating_set_code(state_test, pre, call_opcode)
","text":"Test a transaction that has entry-point into a set-code address that delegates to itself.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.with_all_call_opcodes\ndef test_call_into_self_delegating_set_code(\n state_test: StateTestFiller,\n pre: Alloc,\n call_opcode: Op,\n):\n \"\"\"\n Test a transaction that has entry-point into a set-code address that delegates to itself.\n \"\"\"\n auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n storage = Storage()\n entry_code = (\n Op.SSTORE(\n storage.store_next(call_return_code(opcode=call_opcode, success=False)),\n call_opcode(address=auth_signer),\n )\n + Op.STOP\n )\n entry_address = pre.deploy_contract(entry_code)\n\n tx = Transaction(\n gas_limit=10_000_000,\n to=entry_address,\n value=0,\n authorization_list=[\n AuthorizationTuple(\n address=auth_signer,\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 entry_address: Account(storage=storage),\n auth_signer: Account(nonce=1, code=Spec.delegation_designation(auth_signer)),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_call_into_chain_delegating_set_code","title":"test_call_into_chain_delegating_set_code(state_test, pre, call_opcode)
","text":"Test a transaction that has entry-point into a set-code address that delegates to itself.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.with_all_call_opcodes\ndef test_call_into_chain_delegating_set_code(\n state_test: StateTestFiller,\n pre: Alloc,\n call_opcode: Op,\n):\n \"\"\"\n Test a transaction that has entry-point into a set-code address that delegates to itself.\n \"\"\"\n auth_signer_1 = pre.fund_eoa(auth_account_start_balance)\n auth_signer_2 = pre.fund_eoa(auth_account_start_balance)\n\n storage = Storage()\n entry_code = (\n Op.SSTORE(\n storage.store_next(call_return_code(opcode=call_opcode, success=False)),\n call_opcode(address=auth_signer_1),\n )\n + Op.STOP\n )\n entry_address = pre.deploy_contract(entry_code)\n\n tx = Transaction(\n gas_limit=10_000_000,\n to=entry_address,\n value=0,\n authorization_list=[\n AuthorizationTuple(\n address=auth_signer_2,\n nonce=0,\n signer=auth_signer_1,\n ),\n AuthorizationTuple(\n address=auth_signer_1,\n nonce=0,\n signer=auth_signer_2,\n ),\n ],\n sender=pre.fund_eoa(),\n )\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post={\n entry_address: Account(storage=storage),\n auth_signer_1: Account(nonce=1, code=Spec.delegation_designation(auth_signer_2)),\n auth_signer_2: Account(nonce=1, code=Spec.delegation_designation(auth_signer_1)),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_ext_code_on_set_code","title":"test_ext_code_on_set_code(state_test, pre, balance, set_code_type)
","text":"Test different ext*code operations on a set-code address.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"balance\",\n [0, 1],\n)\n@pytest.mark.parametrize(\n \"set_code_type\",\n list(AddressType),\n ids=lambda address_type: address_type.name,\n)\ndef test_ext_code_on_set_code(\n state_test: StateTestFiller,\n pre: Alloc,\n balance: int,\n set_code_type: AddressType,\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_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_ext_code_size_result, Op.EXTCODESIZE(auth_signer))\n + Op.SSTORE(slot_ext_code_hash_result, Op.EXTCODEHASH(auth_signer))\n + Op.EXTCODECOPY(auth_signer, 0, 0, Op.EXTCODESIZE(auth_signer))\n + Op.SSTORE(slot_ext_code_copy_result, Op.MLOAD(0))\n + Op.SSTORE(slot_ext_balance_result, Op.BALANCE(auth_signer))\n + Op.STOP\n )\n callee_address = pre.deploy_contract(callee_code)\n\n set_code_to_address: Address\n set_code: Bytecode | Bytes\n match set_code_type:\n case AddressType.EMPTY_ACCOUNT:\n set_code = Bytecode()\n set_code_to_address = pre.fund_eoa(0)\n case AddressType.EOA:\n set_code = Bytecode()\n set_code_to_address = pre.fund_eoa(1)\n case AddressType.EOA_WITH_SET_CODE:\n set_code_account = pre.fund_eoa(0)\n set_code = Spec.delegation_designation(set_code_account)\n set_code_to_address = pre.fund_eoa(1, delegation=set_code_account)\n case AddressType.CONTRACT:\n set_code = Op.STOP\n set_code_to_address = pre.deploy_contract(set_code)\n case _:\n raise ValueError(f\"Unsupported set code type: {set_code_type}\")\n\n callee_storage = Storage()\n callee_storage[slot_ext_code_size_result] = len(set_code)\n callee_storage[slot_ext_code_hash_result] = (\n set_code.keccak256() if set_code_type != AddressType.EMPTY_ACCOUNT else 0\n )\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=callee_address,\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.NONEXISTENT\n if set_code_type == AddressType.EMPTY_ACCOUNT\n else Account(storage={}),\n auth_signer: Account(\n nonce=1,\n code=Spec.delegation_designation(set_code_to_address),\n balance=balance,\n ),\n callee_address: Account(storage=callee_storage),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_ext_code_on_self_set_code","title":"test_ext_code_on_self_set_code(state_test, pre, balance)
","text":"Test different ext*code operations on self set-code address.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"balance\",\n [0, 1],\n)\ndef test_ext_code_on_self_set_code(\n state_test: StateTestFiller,\n pre: Alloc,\n balance: int,\n):\n \"\"\"\n Test different ext*code operations on self set-code address.\n \"\"\"\n auth_signer = pre.fund_eoa(balance)\n\n slot = count(1)\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 set_code = (\n Op.SSTORE(slot_ext_code_size_result, Op.EXTCODESIZE(auth_signer))\n + Op.SSTORE(slot_ext_code_hash_result, Op.EXTCODEHASH(auth_signer))\n + Op.EXTCODECOPY(auth_signer, 0, 0, Op.EXTCODESIZE(auth_signer))\n + Op.SSTORE(slot_ext_code_copy_result, Op.MLOAD(0))\n + Op.SSTORE(slot_ext_balance_result, Op.BALANCE(auth_signer))\n + Op.STOP\n )\n set_code_address = pre.deploy_contract(set_code)\n\n set_code_storage = Storage()\n set_code_storage[slot_ext_code_size_result] = len(set_code)\n set_code_storage[slot_ext_code_hash_result] = set_code.keccak256()\n set_code_storage[slot_ext_code_copy_result] = bytes(set_code).ljust(32, b\"\\x00\")[:32]\n set_code_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_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(storage=set_code_storage),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_address_and_authority_warm_state","title":"test_set_code_address_and_authority_warm_state(state_test, pre, call_opcode, set_code_address_first)
","text":"Test set to code address and authority warm status after a call to authority address, or viceversa.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.with_all_call_opcodes(\n selector=(\n lambda opcode: opcode\n not in [Op.STATICCALL, Op.CALLCODE, Op.DELEGATECALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL]\n )\n)\n@pytest.mark.parametrize(\n \"set_code_address_first\",\n [\n pytest.param(True, id=\"call_set_code_address_first_then_authority\"),\n pytest.param(False, id=\"call_authority_first_then_set_code_address\"),\n ],\n)\ndef test_set_code_address_and_authority_warm_state(\n state_test: StateTestFiller,\n pre: Alloc,\n call_opcode: Op,\n set_code_address_first: bool,\n):\n \"\"\"\n Test set to code address and authority warm status after a call to\n authority address, or viceversa.\n \"\"\"\n auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n slot = count(1)\n slot_call_success = next(slot)\n slot_set_code_to_warm_state = next(slot)\n slot_authority_warm_state = next(slot)\n\n set_code = Op.STOP\n set_code_to_address = pre.deploy_contract(set_code)\n\n overhead_cost = 3 * len(call_opcode.kwargs) # type: ignore\n if call_opcode == Op.CALL:\n overhead_cost -= 1 # GAS opcode is less expensive than a PUSH\n\n code_gas_measure_set_code = CodeGasMeasure(\n code=call_opcode(address=set_code_to_address),\n overhead_cost=overhead_cost,\n extra_stack_items=1,\n sstore_key=slot_set_code_to_warm_state,\n stop=False,\n )\n code_gas_measure_authority = CodeGasMeasure(\n code=call_opcode(address=auth_signer),\n overhead_cost=overhead_cost,\n extra_stack_items=1,\n sstore_key=slot_authority_warm_state,\n stop=False,\n )\n\n callee_code = Bytecode()\n if set_code_address_first:\n callee_code += code_gas_measure_set_code + code_gas_measure_authority\n else:\n callee_code += code_gas_measure_authority + code_gas_measure_set_code\n callee_code += Op.SSTORE(slot_call_success, 1) + Op.STOP\n\n callee_address = pre.deploy_contract(callee_code)\n callee_storage = Storage()\n callee_storage[slot_call_success] = 1\n callee_storage[slot_set_code_to_warm_state] = 2_600 if set_code_address_first else 100\n callee_storage[slot_authority_warm_state] = 200 if set_code_address_first else 2_700\n\n tx = Transaction(\n gas_limit=1_000_000,\n to=callee_address,\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 callee_address: Account(storage=callee_storage),\n auth_signer: Account(\n nonce=1,\n code=Spec.delegation_designation(set_code_to_address),\n balance=auth_account_start_balance,\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_ext_code_on_self_delegating_set_code","title":"test_ext_code_on_self_delegating_set_code(state_test, pre, balance)
","text":"Test different ext*code operations on a set-code address that delegates to itself.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"balance\",\n [0, 1],\n)\ndef test_ext_code_on_self_delegating_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 that delegates to itself.\n \"\"\"\n auth_signer = pre.fund_eoa(balance)\n\n slot = count(1)\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_ext_code_size_result, Op.EXTCODESIZE(auth_signer))\n + Op.SSTORE(slot_ext_code_hash_result, Op.EXTCODEHASH(auth_signer))\n + Op.EXTCODECOPY(auth_signer, 0, 0, Op.EXTCODESIZE(auth_signer))\n + Op.SSTORE(slot_ext_code_copy_result, Op.MLOAD(0))\n + Op.SSTORE(slot_ext_balance_result, Op.BALANCE(auth_signer))\n + Op.STOP\n )\n callee_address = pre.deploy_contract(callee_code)\n callee_storage = Storage()\n\n set_code = b\"\\xef\\x01\\x00\" + bytes(auth_signer)\n callee_storage[slot_ext_code_size_result] = len(set_code)\n callee_storage[slot_ext_code_hash_result] = keccak256(set_code)\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=callee_address,\n authorization_list=[\n AuthorizationTuple(\n address=auth_signer,\n nonce=0,\n signer=auth_signer,\n ),\n ],\n sender=pre.fund_eoa(), # TODO: Test with sender as auth_signer\n )\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post={\n auth_signer: Account(\n nonce=1,\n code=Spec.delegation_designation(auth_signer),\n balance=balance,\n ),\n callee_address: Account(storage=callee_storage),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_ext_code_on_chain_delegating_set_code","title":"test_ext_code_on_chain_delegating_set_code(state_test, pre)
","text":"Test different ext*code operations on a set-code address that references another delegated address.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
def test_ext_code_on_chain_delegating_set_code(\n state_test: StateTestFiller,\n pre: Alloc,\n):\n \"\"\"\n Test different ext*code operations on a set-code address that references another delegated\n address.\n \"\"\"\n auth_signer_1_balance = 1\n auth_signer_2_balance = 0\n\n auth_signer_1 = pre.fund_eoa(auth_signer_1_balance)\n auth_signer_2 = pre.fund_eoa(auth_signer_2_balance)\n\n slot = count(1)\n\n slot_ext_code_size_result_1 = next(slot)\n slot_ext_code_hash_result_1 = next(slot)\n slot_ext_code_copy_result_1 = next(slot)\n slot_ext_balance_result_1 = next(slot)\n\n slot_ext_code_size_result_2 = next(slot)\n slot_ext_code_hash_result_2 = next(slot)\n slot_ext_code_copy_result_2 = next(slot)\n slot_ext_balance_result_2 = next(slot)\n\n callee_code = (\n # Address 1\n Op.SSTORE(slot_ext_code_size_result_1, Op.EXTCODESIZE(auth_signer_1))\n + Op.SSTORE(slot_ext_code_hash_result_1, Op.EXTCODEHASH(auth_signer_1))\n + Op.EXTCODECOPY(auth_signer_1, 0, 0, Op.EXTCODESIZE(auth_signer_1))\n + Op.SSTORE(slot_ext_code_copy_result_1, Op.MLOAD(0))\n + Op.SSTORE(slot_ext_balance_result_1, Op.BALANCE(auth_signer_1))\n # Address 2\n + Op.SSTORE(slot_ext_code_size_result_2, Op.EXTCODESIZE(auth_signer_2))\n + Op.SSTORE(slot_ext_code_hash_result_2, Op.EXTCODEHASH(auth_signer_2))\n + Op.EXTCODECOPY(auth_signer_2, 0, 0, Op.EXTCODESIZE(auth_signer_2))\n + Op.SSTORE(slot_ext_code_copy_result_2, Op.MLOAD(0))\n + Op.SSTORE(slot_ext_balance_result_2, Op.BALANCE(auth_signer_2))\n + Op.STOP\n )\n callee_address = pre.deploy_contract(callee_code)\n callee_storage = Storage()\n\n set_code_1 = Spec.delegation_designation(auth_signer_2)\n set_code_2 = Spec.delegation_designation(auth_signer_1)\n\n callee_storage[slot_ext_code_size_result_1] = len(set_code_2)\n callee_storage[slot_ext_code_hash_result_1] = keccak256(set_code_2)\n callee_storage[slot_ext_code_copy_result_1] = bytes(set_code_2).ljust(32, b\"\\x00\")[:32]\n callee_storage[slot_ext_balance_result_1] = auth_signer_1_balance\n\n callee_storage[slot_ext_code_size_result_2] = len(set_code_1)\n callee_storage[slot_ext_code_hash_result_2] = keccak256(set_code_1)\n callee_storage[slot_ext_code_copy_result_2] = bytes(set_code_1).ljust(32, b\"\\x00\")[:32]\n callee_storage[slot_ext_balance_result_2] = auth_signer_2_balance\n\n tx = Transaction(\n gas_limit=10_000_000,\n to=callee_address,\n authorization_list=[\n AuthorizationTuple(\n address=auth_signer_2,\n nonce=0,\n signer=auth_signer_1,\n ),\n AuthorizationTuple(\n address=auth_signer_1,\n nonce=0,\n signer=auth_signer_2,\n ),\n ],\n sender=pre.fund_eoa(), # TODO: Test with sender as auth_signer\n )\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post={\n auth_signer_1: Account(\n nonce=1,\n code=Spec.delegation_designation(auth_signer_2),\n balance=auth_signer_1_balance,\n ),\n auth_signer_2: Account(\n nonce=1,\n code=Spec.delegation_designation(auth_signer_1),\n balance=auth_signer_2_balance,\n ),\n callee_address: Account(storage=callee_storage),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_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 intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"balance\",\n [0, 1],\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(\n nonce=1,\n code=Spec.delegation_designation(set_code_to_address),\n storage=storage,\n balance=balance,\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_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_opcode, evm_code_type)
","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 intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.with_all_create_opcodes\ndef test_set_code_to_account_deployed_in_same_tx(\n state_test: StateTestFiller,\n pre: Alloc,\n create_opcode: Op,\n evm_code_type: EVMCodeType,\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: Bytecode | Container = Op.SSTORE(success_slot, 1) + Op.STOP\n initcode: Bytecode | Container\n\n if evm_code_type == EVMCodeType.LEGACY:\n initcode = Initcode(deploy_code=deployed_code)\n elif evm_code_type == EVMCodeType.EOF_V1:\n deployed_code = Container.Code(deployed_code)\n initcode = Container.Init(deploy_container=deployed_code)\n else:\n raise ValueError(f\"Unsupported EVM code type: {evm_code_type}\")\n\n deployed_contract_address_slot = 1\n signer_call_return_code_slot = 2\n deployed_contract_call_return_code_slot = 3\n\n salt = 0\n call_opcode = Op.CALL if evm_code_type == EVMCodeType.LEGACY else Op.EXTCALL\n\n if create_opcode == Op.EOFCREATE:\n create_opcode = Op.EOFCREATE[0] # type: ignore\n\n contract_creator_code: Bytecode | Container = (\n Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) # NOOP on EOF\n + Op.SSTORE(\n deployed_contract_address_slot,\n create_opcode(offset=0, salt=salt, size=Op.CALLDATASIZE),\n )\n + Op.SSTORE(signer_call_return_code_slot, call_opcode(address=auth_signer))\n + Op.SSTORE(\n deployed_contract_call_return_code_slot,\n call_opcode(address=Op.SLOAD(deployed_contract_address_slot)),\n )\n + Op.STOP()\n )\n\n if evm_code_type == EVMCodeType.EOF_V1:\n contract_creator_code = Container(\n sections=[\n Section.Code(contract_creator_code),\n Section.Container(container=initcode),\n ],\n )\n\n contract_creator_address = pre.deploy_contract(contract_creator_code)\n\n deployed_contract_address = compute_create_address(\n address=contract_creator_address,\n nonce=1,\n salt=salt,\n initcode=initcode,\n opcode=create_opcode,\n )\n\n tx = Transaction(\n gas_limit=10_000_000,\n to=contract_creator_address,\n value=0,\n data=initcode if evm_code_type == EVMCodeType.LEGACY else b\"\",\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=1,\n code=Spec.delegation_designation(deployed_contract_address),\n storage={success_slot: 1},\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_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_to_self_destructing_account_deployed_in_same_tx","title":"test_set_code_to_self_destructing_account_deployed_in_same_tx(state_test, pre, create_opcode, call_set_code_first, external_sendall_recipient, balance)
","text":"Test setting the code of an account to an account that contains the SELFDESTRUCT opcode and was deployed in the same transaction, and test calling the set-code address and the deployed in both sequence orders.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"external_sendall_recipient\",\n [False, True],\n)\n@pytest.mark.parametrize(\n \"balance\",\n [0, 1],\n)\n@pytest.mark.parametrize(\"call_set_code_first\", [False, True])\n@pytest.mark.parametrize(\n \"create_opcode\", [Op.CREATE, Op.CREATE2]\n) # EOF code does not support SELFDESTRUCT\ndef test_set_code_to_self_destructing_account_deployed_in_same_tx(\n state_test: StateTestFiller,\n pre: Alloc,\n create_opcode: Op,\n call_set_code_first: bool,\n external_sendall_recipient: bool,\n balance: int,\n):\n \"\"\"\n Test setting the code of an account to an account that contains the SELFDESTRUCT opcode and\n was deployed in the same transaction, and test calling the set-code address and the deployed\n in both sequence orders.\n \"\"\"\n auth_signer = pre.fund_eoa(balance)\n if external_sendall_recipient:\n recipient = pre.fund_eoa(0)\n else:\n recipient = auth_signer\n\n success_slot = 1\n\n deployed_code = Op.SSTORE(success_slot, 1) + Op.SELFDESTRUCT(recipient)\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 salt = 0\n call_opcode = Op.CALL\n\n contract_creator_code: Bytecode = Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE) + Op.SSTORE(\n deployed_contract_address_slot,\n create_opcode(offset=0, salt=salt, size=Op.CALLDATASIZE),\n )\n if call_set_code_first:\n contract_creator_code += Op.SSTORE(\n signer_call_return_code_slot, call_opcode(address=auth_signer)\n ) + Op.SSTORE(\n deployed_contract_call_return_code_slot,\n call_opcode(address=Op.SLOAD(deployed_contract_address_slot)),\n )\n else:\n contract_creator_code += Op.SSTORE(\n deployed_contract_call_return_code_slot,\n call_opcode(address=Op.SLOAD(deployed_contract_address_slot)),\n ) + Op.SSTORE(signer_call_return_code_slot, call_opcode(address=auth_signer))\n\n contract_creator_code += Op.STOP\n\n contract_creator_address = pre.deploy_contract(contract_creator_code)\n\n deployed_contract_address = compute_create_address(\n address=contract_creator_address,\n nonce=1,\n salt=salt,\n initcode=initcode,\n opcode=create_opcode,\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 post = {\n deployed_contract_address: Account.NONEXISTENT,\n auth_signer: Account(\n nonce=1,\n code=Spec.delegation_designation(deployed_contract_address),\n storage={success_slot: 1},\n balance=balance if not external_sendall_recipient else 0,\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 if external_sendall_recipient and balance > 0:\n post[recipient] = Account(balance=balance)\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post=post,\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_multiple_first_valid_authorization_tuples_same_signer","title":"test_set_code_multiple_first_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 intests/prague/eip7702_set_code_tx/test_set_code_txs.py
def test_set_code_multiple_first_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 tuple_count = 10\n\n success_slot = 0\n\n addresses = [pre.deploy_contract(Op.SSTORE(i, 1) + Op.STOP) for i in range(tuple_count)]\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=1,\n code=Spec.delegation_designation(addresses[0]),\n storage={\n success_slot: 1,\n },\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce","title":"test_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce(state_test, pre)
","text":"Test setting the code of an account with multiple authorization tuples from the same signer and each authorization tuple has an increasing nonce, therefore the last tuple is executed.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
def test_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce(\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 and each authorization tuple has an increasing nonce, therefore the last tuple is executed.\n \"\"\"\n auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n tuple_count = 10\n\n success_slot = tuple_count - 1\n\n addresses = [pre.deploy_contract(Op.SSTORE(i, 1) + Op.STOP) for i in range(tuple_count)]\n\n tx = Transaction(\n gas_limit=10_000_000, # TODO: Reduce gas limit of all tests\n to=auth_signer,\n value=0,\n authorization_list=[\n AuthorizationTuple(\n address=address,\n nonce=i,\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=10,\n code=Spec.delegation_designation(addresses[success_slot]),\n storage={\n success_slot: 1,\n },\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce_self_sponsored","title":"test_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce_self_sponsored(state_test, pre)
","text":"Test setting the code of an account with multiple authorization tuples from the same signer and each authorization tuple has an increasing nonce, therefore the last tuple is executed, and the transaction is self-sponsored.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
def test_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce_self_sponsored(\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 and each authorization tuple has an increasing nonce, therefore the last tuple is executed,\n and the transaction is self-sponsored.\n \"\"\"\n auth_signer = pre.fund_eoa()\n\n tuple_count = 10\n\n success_slot = tuple_count - 1\n\n addresses = [pre.deploy_contract(Op.SSTORE(i, 1) + Op.STOP) for i in range(tuple_count)]\n\n tx = Transaction(\n gas_limit=10_000_000, # TODO: Reduce gas limit of all tests\n to=auth_signer,\n value=0,\n authorization_list=[\n AuthorizationTuple(\n address=address,\n nonce=i + 1,\n signer=auth_signer,\n )\n for i, address in enumerate(addresses)\n ],\n sender=auth_signer,\n )\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post={\n auth_signer: Account(\n nonce=11,\n code=Spec.delegation_designation(addresses[success_slot]),\n storage={\n success_slot: 1,\n },\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_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 intests/prague/eip7702_set_code_tx/test_set_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 = [pre.deploy_contract(Op.SSTORE(i, 1) + Op.STOP) for i in range(tuple_count)]\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=1,\n code=Spec.delegation_designation(addresses[1]),\n storage={\n success_slot: 1,\n },\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_all_invalid_authorization_tuples","title":"test_set_code_all_invalid_authorization_tuples(state_test, pre)
","text":"Test setting the code of an account with multiple authorization tuples from the same signer and all of them are invalid.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
def test_set_code_all_invalid_authorization_tuples(\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 and all of them are invalid.\n \"\"\"\n auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n tuple_count = 10\n\n addresses = [pre.deploy_contract(Op.SSTORE(i, 1) + Op.STOP) for i in range(tuple_count)]\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,\n signer=auth_signer,\n )\n for _, 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.NONEXISTENT,\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_invalid_authorization_tuple","title":"test_set_code_invalid_authorization_tuple(state_test, pre, invalidity_reason, transaction_exception)
","text":"Test attempting to set the code of an account with invalid authorization tuple.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"invalidity_reason,transaction_exception\",\n [\n pytest.param(\n InvalidityReason.NONCE,\n None, # Transaction is valid and accepted, but no authorization tuple is processed\n ),\n pytest.param(\n InvalidityReason.MULTIPLE_NONCE,\n None,\n marks=pytest.mark.xfail(reason=\"test issue\"),\n ),\n pytest.param(\n InvalidityReason.CHAIN_ID,\n None, # Transaction is valid and accepted, but no authorization tuple is processed\n ),\n pytest.param(\n InvalidityReason.EMPTY_AUTHORIZATION_LIST,\n TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST,\n ),\n ],\n)\ndef test_set_code_invalid_authorization_tuple(\n state_test: StateTestFiller,\n pre: Alloc,\n invalidity_reason: InvalidityReason,\n transaction_exception: TransactionException | None,\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 authorization_list: List[AuthorizationTuple] = []\n\n if invalidity_reason != InvalidityReason.EMPTY_AUTHORIZATION_LIST:\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\n tx = Transaction(\n gas_limit=10_000_000,\n to=auth_signer,\n value=0,\n authorization_list=authorization_list,\n error=transaction_exception,\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.NONEXISTENT,\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_using_chain_specific_id","title":"test_set_code_using_chain_specific_id(state_test, pre)
","text":"Test sending a transaction to set the code of an account using a chain-specific ID.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
def test_set_code_using_chain_specific_id(\n state_test: StateTestFiller,\n pre: Alloc,\n):\n \"\"\"\n Test sending a transaction to set the code of an account using a chain-specific ID.\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=100_000,\n to=auth_signer,\n value=0,\n authorization_list=[\n AuthorizationTuple(\n address=set_code_to_address,\n nonce=0,\n chain_id=1,\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=1,\n code=Spec.delegation_designation(set_code_to_address),\n storage={\n success_slot: 1,\n },\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_using_valid_synthetic_signatures","title":"test_set_code_using_valid_synthetic_signatures(state_test, pre, v, r, s)
","text":"Test sending a transaction to set the code of an account using synthetic signatures.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"v,r,s\",\n [\n pytest.param(0, 1, 1, id=\"v=0,r=1,s=1\"),\n pytest.param(1, 1, 1, id=\"v=1,r=1,s=1\"),\n pytest.param(\n 2, 1, 1, id=\"v=2,r=1,s=1\", marks=pytest.mark.xfail(reason=\"invalid signature\")\n ),\n pytest.param(\n 1, 0, 1, id=\"v=1,r=0,s=1\", marks=pytest.mark.xfail(reason=\"invalid signature\")\n ),\n pytest.param(\n 1, 1, 0, id=\"v=1,r=1,s=0\", marks=pytest.mark.xfail(reason=\"invalid signature\")\n ),\n pytest.param(\n 0,\n SECP256K1N - 0,\n 1,\n id=\"v=0,r=SECP256K1N,s=1\",\n marks=pytest.mark.xfail(reason=\"invalid signature\"),\n ),\n pytest.param(\n 0,\n SECP256K1N - 1,\n 1,\n id=\"v=0,r=SECP256K1N-1,s=1\",\n marks=pytest.mark.xfail(reason=\"invalid signature\"),\n ),\n pytest.param(0, SECP256K1N - 2, 1, id=\"v=0,r=SECP256K1N-2,s=1\"),\n pytest.param(1, SECP256K1N - 2, 1, id=\"v=1,r=SECP256K1N-2,s=1\"),\n pytest.param(0, 1, SECP256K1N_OVER_2, id=\"v=0,r=1,s=SECP256K1N_OVER_2\"),\n pytest.param(1, 1, SECP256K1N_OVER_2, id=\"v=1,r=1,s=SECP256K1N_OVER_2\"),\n pytest.param(\n 0,\n 1,\n SECP256K1N_OVER_2 + 1,\n id=\"v=0,r=1,s=SECP256K1N_OVER_2+1\",\n marks=pytest.mark.xfail(reason=\"invalid signature\"),\n ),\n ],\n)\ndef test_set_code_using_valid_synthetic_signatures(\n state_test: StateTestFiller,\n pre: Alloc,\n v: int,\n r: int,\n s: int,\n):\n \"\"\"\n Test sending a transaction to set the code of an account using synthetic signatures.\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 authorization_tuple = AuthorizationTuple(\n address=set_code_to_address,\n nonce=0,\n chain_id=1,\n v=v,\n r=r,\n s=s,\n )\n\n auth_signer = authorization_tuple.signer\n\n tx = Transaction(\n gas_limit=100_000,\n to=auth_signer,\n value=0,\n authorization_list=[authorization_tuple],\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=1,\n code=Spec.delegation_designation(set_code_to_address),\n storage={\n success_slot: 1,\n },\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_invalid_tx_invalid_auth_signature","title":"test_invalid_tx_invalid_auth_signature(state_test, pre, v, r, s)
","text":"Test sending a transaction to set the code of an account using synthetic signatures.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"v,r,s\",\n [\n pytest.param(2, 1, 1, id=\"v_2,r_1,s_1\"),\n pytest.param(\n 0,\n 1,\n SECP256K1N_OVER_2 + 1,\n id=\"v_0,r_1,s_SECP256K1N_OVER_2+1\",\n ),\n pytest.param(\n 2**256 - 1,\n 1,\n 1,\n id=\"v_2**256-1,r_1,s_1\",\n ),\n pytest.param(\n 0,\n 1,\n 2**256 - 1,\n id=\"v_0,r_1,s_2**256-1\",\n ),\n ],\n)\ndef test_invalid_tx_invalid_auth_signature(\n state_test: StateTestFiller,\n pre: Alloc,\n v: int,\n r: int,\n s: int,\n):\n \"\"\"\n Test sending a transaction to set the code of an account using synthetic signatures.\n \"\"\"\n success_slot = 1\n\n callee_code = Op.SSTORE(success_slot, 1) + Op.STOP\n callee_address = pre.deploy_contract(callee_code)\n\n authorization_tuple = AuthorizationTuple(\n address=0,\n nonce=0,\n chain_id=1,\n v=v,\n r=r,\n s=s,\n )\n\n tx = Transaction(\n gas_limit=100_000,\n to=callee_address,\n value=0,\n authorization_list=[authorization_tuple],\n error=TransactionException.TYPE_4_INVALID_AUTHORITY_SIGNATURE,\n sender=pre.fund_eoa(),\n )\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post={\n callee_address: Account(\n storage={success_slot: 0},\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_using_invalid_signatures","title":"test_set_code_using_invalid_signatures(state_test, pre, v, r, s)
","text":"Test sending a transaction to set the code of an account using synthetic signatures, the transaction is valid but the authorization should not go through.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"v,r,s\",\n [\n pytest.param(1, 0, 1, id=\"v_1,r_0,s_1\"),\n pytest.param(1, 1, 0, id=\"v_1,r_1,s_0\"),\n pytest.param(\n 0,\n SECP256K1N,\n 1,\n id=\"v_0,r_SECP256K1N,s_1\",\n ),\n pytest.param(\n 0,\n SECP256K1N - 1,\n 1,\n id=\"v_0,r_SECP256K1N-1,s_1\",\n ),\n pytest.param(\n 0,\n 1,\n SECP256K1N_OVER_2,\n id=\"v_0,r_1,s_SECP256K1N_OVER_2\",\n ),\n pytest.param(\n 0,\n 1,\n SECP256K1N_OVER_2 - 1,\n id=\"v_0,r_1,s_SECP256K1N_OVER_2_minus_one\",\n ),\n pytest.param(\n 1,\n 2**256 - 1,\n 1,\n id=\"v_1,r_2**256-1,s_1\",\n ),\n ],\n)\ndef test_set_code_using_invalid_signatures(\n state_test: StateTestFiller,\n pre: Alloc,\n v: int,\n r: int,\n s: int,\n):\n \"\"\"\n Test sending a transaction to set the code of an account using synthetic signatures,\n the transaction is valid but the authorization should not go through.\n \"\"\"\n success_slot = 1\n\n callee_code = Op.SSTORE(success_slot, 1) + Op.STOP\n callee_address = pre.deploy_contract(callee_code)\n\n authorization_tuple = AuthorizationTuple(\n address=0,\n nonce=0,\n chain_id=1,\n v=v,\n r=r,\n s=s,\n )\n\n tx = Transaction(\n gas_limit=100_000,\n to=callee_address,\n value=0,\n authorization_list=[authorization_tuple],\n sender=pre.fund_eoa(),\n )\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post={\n callee_address: Account(\n storage={success_slot: 1},\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_to_log","title":"test_set_code_to_log(state_test, pre, log_opcode)
","text":"Test setting the code of an account to a contract that performs the log operation.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"log_opcode\",\n [\n Op.LOG0,\n Op.LOG1,\n Op.LOG2,\n Op.LOG3,\n Op.LOG4,\n ],\n)\n@pytest.mark.with_all_evm_code_types\ndef test_set_code_to_log(\n state_test: StateTestFiller,\n pre: Alloc,\n log_opcode: Op,\n):\n \"\"\"\n Test setting the code of an account to a contract that performs the log operation.\n \"\"\"\n sender = pre.fund_eoa()\n\n set_to_code = (\n Op.MSTORE(0, 0x1234)\n + log_opcode(size=32, topic_1=1, topic_2=2, topic_3=3, topic_4=4)\n + Op.STOP\n )\n set_to_address = pre.deploy_contract(set_to_code)\n\n tx = Transaction(\n gas_limit=10_000_000,\n to=sender,\n value=0,\n authorization_list=[\n AuthorizationTuple(\n address=set_to_address,\n nonce=1,\n signer=sender,\n ),\n ],\n sender=sender,\n )\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post={\n sender: Account(\n nonce=2,\n code=Spec.delegation_designation(set_to_address),\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_to_precompile","title":"test_set_code_to_precompile(state_test, pre, precompile, call_opcode)
","text":"Test setting the code of an account to a pre-compile address.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.with_all_call_opcodes(\n selector=(\n lambda opcode: opcode\n not in [Op.STATICCALL, Op.CALLCODE, Op.DELEGATECALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL]\n )\n)\n@pytest.mark.with_all_precompiles\ndef test_set_code_to_precompile(\n state_test: StateTestFiller,\n pre: Alloc,\n precompile: int,\n call_opcode: Op,\n):\n \"\"\"\n Test setting the code of an account to a pre-compile address.\n \"\"\"\n auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n caller_code_storage = Storage()\n caller_code = (\n Op.SSTORE(\n caller_code_storage.store_next(call_return_code(opcode=call_opcode, success=True)),\n call_opcode(address=auth_signer),\n )\n + Op.SSTORE(caller_code_storage.store_next(0), Op.RETURNDATASIZE)\n + Op.STOP\n )\n caller_code_address = pre.deploy_contract(caller_code)\n\n tx = Transaction(\n sender=pre.fund_eoa(),\n gas_limit=500_000,\n to=caller_code_address,\n authorization_list=[\n AuthorizationTuple(\n address=Address(precompile),\n nonce=0,\n signer=auth_signer,\n ),\n ],\n )\n\n state_test(\n env=Environment(),\n pre=pre,\n tx=tx,\n post={\n auth_signer: Account(\n nonce=1,\n code=Spec.delegation_designation(Address(precompile)),\n ),\n caller_code_address: Account(\n storage=caller_code_storage,\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_set_code_to_system_contract","title":"test_set_code_to_system_contract(blockchain_test, pre, system_contract, call_opcode)
","text":"Test setting the code of an account to a pre-compile address.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.with_all_call_opcodes(\n selector=(\n lambda opcode: opcode\n not in [Op.STATICCALL, Op.CALLCODE, Op.DELEGATECALL, Op.EXTDELEGATECALL, Op.EXTSTATICCALL]\n )\n)\n@pytest.mark.with_all_system_contracts\ndef test_set_code_to_system_contract(\n blockchain_test: BlockchainTestFiller,\n pre: Alloc,\n system_contract: int,\n call_opcode: Op,\n):\n \"\"\"\n Test setting the code of an account to a pre-compile address.\n \"\"\"\n caller_code_storage = Storage()\n call_return_code_slot = caller_code_storage.store_next(\n call_return_code(\n opcode=call_opcode,\n success=True,\n )\n )\n call_return_data_size_slot = caller_code_storage.store_next(0)\n\n call_value = 0\n\n # Setup the initial storage of the account to mimic the system contract if required\n match system_contract:\n case Address(0x00000000219AB540356CBB839CBE05303D7705FA): # EIP-6110\n # Deposit contract needs specific storage values, so we set them on the account\n auth_signer = pre.fund_eoa(\n auth_account_start_balance, storage=deposit_contract_initial_storage()\n )\n case Address(0x000F3DF6D732807EF1319FB7B8BB8522D0BEAC02): # EIP-4788\n auth_signer = pre.fund_eoa(auth_account_start_balance, storage=Storage({1: 1}))\n case _:\n # Pre-fund without storage\n auth_signer = pre.fund_eoa(auth_account_start_balance)\n\n # Fabricate the payload for the system contract\n match system_contract:\n case Address(0x000F3DF6D732807EF1319FB7B8BB8522D0BEAC02): # EIP-4788\n caller_payload = Hash(1)\n caller_code_storage[call_return_data_size_slot] = 32\n case Address(0x00000000219AB540356CBB839CBE05303D7705FA): # EIP-6110\n # Fabricate a valid deposit request to the set-code account\n deposit_request = DepositRequest(\n pubkey=0x01,\n withdrawal_credentials=0x02,\n amount=1_000_000_000,\n signature=0x03,\n index=0x0,\n )\n caller_payload = deposit_request.calldata\n call_value = deposit_request.value\n case Address(0x00A3CA265EBCB825B45F985A16CEFB49958CE017): # EIP-7002\n # Fabricate a valid withdrawal request to the set-code account\n withdrawal_request = WithdrawalRequest(\n source_address=0x01,\n validator_pubkey=0x02,\n amount=0x03,\n fee=0x01,\n )\n caller_payload = withdrawal_request.calldata\n call_value = withdrawal_request.value\n case Address(0x00B42DBF2194E931E80326D950320F7D9DBEAC02): # EIP-7251\n # Fabricate a valid consolidation request to the set-code account\n consolidation_request = ConsolidationRequest(\n source_address=0x01,\n source_pubkey=0x02,\n target_pubkey=0x03,\n fee=0x01,\n )\n caller_payload = consolidation_request.calldata\n call_value = consolidation_request.value\n case Address(0x0AAE40965E6800CD9B1F4B05FF21581047E3F91E): # EIP-2935\n caller_payload = Hash(0)\n caller_code_storage[call_return_data_size_slot] = 32\n case _:\n raise ValueError(f\"Not implemented system contract: {system_contract}\")\n\n caller_code = (\n Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)\n + Op.SSTORE(\n call_return_code_slot,\n call_opcode(address=auth_signer, value=call_value, args_size=Op.CALLDATASIZE),\n )\n + Op.SSTORE(call_return_data_size_slot, Op.RETURNDATASIZE)\n + Op.STOP\n )\n caller_code_address = pre.deploy_contract(caller_code)\n\n txs = [\n Transaction(\n sender=pre.fund_eoa(),\n gas_limit=500_000,\n to=caller_code_address,\n value=call_value,\n data=caller_payload,\n authorization_list=[\n AuthorizationTuple(\n address=Address(system_contract),\n nonce=auth_signer.nonce,\n signer=auth_signer,\n ),\n ],\n )\n ]\n\n blockchain_test(\n pre=pre,\n blocks=[\n Block(\n txs=txs,\n requests_root=[], # Verify nothing slipped into the requests trie\n )\n ],\n post={\n auth_signer: Account(\n nonce=auth_signer.nonce + 1,\n code=Spec.delegation_designation(Address(system_contract)),\n ),\n caller_code_address: Account(\n storage=caller_code_storage,\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_eoa_tx_after_set_code","title":"test_eoa_tx_after_set_code(blockchain_test, pre, tx_type, evm_code_type)
","text":"Test sending a transaction from an EOA after code has been set to the account.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.with_all_evm_code_types\n@pytest.mark.with_all_tx_types(selector=lambda tx_type: tx_type != 4)\ndef test_eoa_tx_after_set_code(\n blockchain_test: BlockchainTestFiller,\n pre: Alloc,\n tx_type: int,\n evm_code_type: EVMCodeType,\n):\n \"\"\"\n Test sending a transaction from an EOA after code has been set to the account.\n \"\"\"\n auth_signer = pre.fund_eoa()\n\n set_code = Op.SSTORE(1, Op.ADD(Op.SLOAD(1), 1)) + Op.STOP\n set_code_to_address = pre.deploy_contract(set_code)\n\n txs = [\n Transaction(\n sender=pre.fund_eoa(),\n gas_limit=500_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 )\n ]\n auth_signer.nonce += 1 # type: ignore\n\n match tx_type:\n case 0:\n txs.append(\n Transaction(\n type=tx_type,\n sender=auth_signer,\n gas_limit=500_000,\n to=auth_signer,\n value=0,\n protected=True,\n ),\n )\n txs.append(\n Transaction(\n type=tx_type,\n sender=auth_signer,\n gas_limit=500_000,\n to=auth_signer,\n value=0,\n protected=False,\n ),\n )\n case 1:\n txs.append(\n Transaction(\n type=tx_type,\n sender=auth_signer,\n gas_limit=500_000,\n to=auth_signer,\n value=0,\n access_list=[\n AccessList(\n address=auth_signer,\n storage_keys=[1],\n )\n ],\n ),\n )\n case 2:\n txs.append(\n Transaction(\n type=tx_type,\n sender=auth_signer,\n gas_limit=500_000,\n to=auth_signer,\n value=0,\n max_fee_per_gas=1_000,\n max_priority_fee_per_gas=1_000,\n ),\n )\n case 3:\n txs.append(\n Transaction(\n type=tx_type,\n sender=auth_signer,\n gas_limit=500_000,\n to=auth_signer,\n value=0,\n max_fee_per_gas=1_000,\n max_priority_fee_per_gas=1_000,\n max_fee_per_blob_gas=1_000,\n blob_versioned_hashes=add_kzg_version(\n [Hash(1)],\n Spec4844.BLOB_COMMITMENT_VERSION_KZG,\n ),\n ),\n )\n case _:\n raise ValueError(f\"Unsupported tx type: {tx_type}, test needs update\")\n\n blockchain_test(\n pre=pre,\n blocks=[Block(txs=txs)],\n post={\n auth_signer: Account(\n nonce=3 if tx_type == 0 else 2,\n code=Spec.delegation_designation(set_code_to_address),\n storage={1: 3 if tx_type == 0 else 2},\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/#tests.prague.eip7702_set_code_tx.test_set_code_txs.test_reset_code","title":"test_reset_code(blockchain_test, pre, self_sponsored)
","text":"Test sending type-4 tx to reset the code of an account after code has been set to the account.
Source code intests/prague/eip7702_set_code_tx/test_set_code_txs.py
@pytest.mark.parametrize(\n \"self_sponsored\",\n [\n pytest.param(False, id=\"not_self_sponsored\"),\n pytest.param(True, id=\"self_sponsored\"),\n ],\n)\ndef test_reset_code(\n blockchain_test: BlockchainTestFiller,\n pre: Alloc,\n self_sponsored: bool,\n):\n \"\"\"\n Test sending type-4 tx to reset the code of an account after code has been set to the account.\n \"\"\"\n auth_signer = pre.fund_eoa()\n\n set_code_1 = Op.SSTORE(1, Op.ADD(Op.SLOAD(1), 1)) + Op.STOP\n set_code_1_address = pre.deploy_contract(set_code_1)\n\n set_code_2 = Op.SSTORE(2, Op.ADD(Op.SLOAD(2), 1)) + Op.STOP\n set_code_2_address = pre.deploy_contract(set_code_2)\n\n sender = pre.fund_eoa()\n\n txs = [\n Transaction(\n sender=sender,\n gas_limit=500_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 )\n ]\n\n auth_signer.nonce += 1 # type: ignore\n\n if self_sponsored:\n sender = auth_signer\n\n txs.append(\n Transaction(\n sender=sender,\n gas_limit=500_000,\n to=auth_signer,\n value=0,\n authorization_list=[\n AuthorizationTuple(\n address=set_code_2_address,\n nonce=auth_signer.nonce + 1 if self_sponsored else auth_signer.nonce,\n signer=auth_signer,\n ),\n ],\n ),\n )\n\n blockchain_test(\n pre=pre,\n blocks=[Block(txs=txs)],\n post={\n auth_signer: Account(\n nonce=3 if self_sponsored else 2,\n code=Spec.delegation_designation(set_code_2_address),\n storage={1: 1, 2: 1},\n ),\n },\n )\n
"},{"location":"tests/prague/eip7702_set_code_tx/test_set_code_txs/index/test_cases/","title":"Test Set Code Txs - Test Cases","text":"Test cases generated from tests/prague/eip7702_set_code_tx/test_set_code_txs.py
Parametrized test cases generated from the test module tests/prague/eip7702_set_code_tx/test_set_code_txs.py
:
test_self_sponsored_set_code[fork_Prague-blockchain_test-stop-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test-stop-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test-return-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test-return-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test-revert-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test-revert-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test-invalid-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test-invalid-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test-out-of-gas-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test-out-of-gas-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test_engine-stop-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test_engine-stop-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test_engine-return-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test_engine-return-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test_engine-revert-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test_engine-revert-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test_engine-invalid-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test_engine-invalid-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test_engine-out-of-gas-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-blockchain_test_engine-out-of-gas-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-state_test-stop-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-state_test-stop-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-state_test-return-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-state_test-return-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-state_test-revert-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-state_test-revert-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-state_test-invalid-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-state_test-invalid-tx_value_1]\ntest_self_sponsored_set_code[fork_Prague-state_test-out-of-gas-tx_value_0]\ntest_self_sponsored_set_code[fork_Prague-state_test-out-of-gas-tx_value_1]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-stop-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-stop-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-stop-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-stop-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-stop-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-stop-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-return-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-return-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-return-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-return-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-return-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-return-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-revert-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-revert-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-revert-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-revert-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-revert-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-revert-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-invalid-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-invalid-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-invalid-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-invalid-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-invalid-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-invalid-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-out-of-gas-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-out-of-gas-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-out-of-gas-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-out-of-gas-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-out-of-gas-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test-out-of-gas-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-stop-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-stop-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-stop-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-stop-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-stop-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-stop-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-return-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-return-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-return-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-return-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-return-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-return-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-revert-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-revert-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-revert-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-revert-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-revert-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-revert-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-invalid-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-invalid-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-invalid-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-invalid-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-invalid-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-invalid-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-out-of-gas-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-out-of-gas-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-out-of-gas-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-out-of-gas-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-out-of-gas-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-blockchain_test_engine-out-of-gas-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-state_test-stop-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-stop-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-stop-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-state_test-stop-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-stop-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-stop-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-state_test-return-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-return-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-return-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-state_test-return-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-return-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-return-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-state_test-revert-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-revert-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-revert-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-state_test-revert-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-revert-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-revert-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-state_test-invalid-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-invalid-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-invalid-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-state_test-invalid-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-invalid-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-invalid-tx_value_1-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-state_test-out-of-gas-tx_value_0-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-out-of-gas-tx_value_0-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-out-of-gas-tx_value_0-self_sponsored_tx]\ntest_set_code_to_sstore[fork_Prague-state_test-out-of-gas-tx_value_1-zero_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-out-of-gas-tx_value_1-one_wei_balance_authority]\ntest_set_code_to_sstore[fork_Prague-state_test-out-of-gas-tx_value_1-self_sponsored_tx]\ntest_set_code_to_zero_address[fork_Prague-blockchain_test]\ntest_set_code_to_zero_address[fork_Prague-blockchain_test_engine]\ntest_set_code_to_zero_address[fork_Prague-state_test]\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-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test-return_opcode_REVERT]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine-return_opcode_REVERT]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test-return_opcode_REVERT]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test-return_opcode_REVERT]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine-return_opcode_REVERT]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test-return_opcode_REVERT]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test-return_opcode_REVERT]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine-return_opcode_REVERT]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test-return_opcode_REVERT]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test-return_opcode_REVERT]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine-return_opcode_REVERT]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test-return_opcode_RETURN]\ntest_set_code_to_tstore_reentry[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test-return_opcode_REVERT]\ntest_set_code_to_self_destruct[fork_Prague-blockchain_test-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destruct[fork_Prague-blockchain_test-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destruct[fork_Prague-blockchain_test-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destruct[fork_Prague-blockchain_test-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destruct[fork_Prague-blockchain_test_engine-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destruct[fork_Prague-blockchain_test_engine-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destruct[fork_Prague-blockchain_test_engine-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destruct[fork_Prague-blockchain_test_engine-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destruct[fork_Prague-state_test-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destruct[fork_Prague-state_test-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destruct[fork_Prague-state_test-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destruct[fork_Prague-state_test-balance_1-external_sendall_recipient_True]\ntest_set_code_to_contract_creator[fork_Prague-create_opcode_CREATE2-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_contract_creator[fork_Prague-create_opcode_CREATE2-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_contract_creator[fork_Prague-create_opcode_CREATE2-evm_code_type_LEGACY-state_test]\ntest_set_code_to_contract_creator[fork_Prague-create_opcode_CREATE-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_contract_creator[fork_Prague-create_opcode_CREATE-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_contract_creator[fork_Prague-create_opcode_CREATE-evm_code_type_LEGACY-state_test]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test-value_1]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine-value_1]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test-value_1]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test-value_1]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine-value_1]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test-value_1]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test-value_1]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine-value_1]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test-value_1]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test-value_1]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine-value_1]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test-value_0]\ntest_set_code_to_self_caller[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine-value_1]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test-value_0]\ntest_set_code_call_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test-value_1]\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_tx_into_self_delegating_set_code[fork_Prague-blockchain_test]\ntest_tx_into_self_delegating_set_code[fork_Prague-blockchain_test_engine]\ntest_tx_into_self_delegating_set_code[fork_Prague-state_test]\ntest_tx_into_chain_delegating_set_code[fork_Prague-blockchain_test]\ntest_tx_into_chain_delegating_set_code[fork_Prague-blockchain_test_engine]\ntest_tx_into_chain_delegating_set_code[fork_Prague-state_test]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine]\ntest_call_into_self_delegating_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_STATICCALL-evm_code_type_LEGACY-state_test]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_DELEGATECALL-evm_code_type_LEGACY-state_test]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-blockchain_test_engine]\ntest_call_into_chain_delegating_set_code[fork_Prague-call_opcode_CALLCODE-evm_code_type_LEGACY-state_test]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test-EMPTY_ACCOUNT-balance_0]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test-EMPTY_ACCOUNT-balance_1]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test-EOA-balance_0]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test-EOA-balance_1]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test-EOA_WITH_SET_CODE-balance_0]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test-EOA_WITH_SET_CODE-balance_1]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test-CONTRACT-balance_0]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test-CONTRACT-balance_1]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test_engine-EMPTY_ACCOUNT-balance_0]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test_engine-EMPTY_ACCOUNT-balance_1]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test_engine-EOA-balance_0]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test_engine-EOA-balance_1]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test_engine-EOA_WITH_SET_CODE-balance_0]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test_engine-EOA_WITH_SET_CODE-balance_1]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test_engine-CONTRACT-balance_0]\ntest_ext_code_on_set_code[fork_Prague-blockchain_test_engine-CONTRACT-balance_1]\ntest_ext_code_on_set_code[fork_Prague-state_test-EMPTY_ACCOUNT-balance_0]\ntest_ext_code_on_set_code[fork_Prague-state_test-EMPTY_ACCOUNT-balance_1]\ntest_ext_code_on_set_code[fork_Prague-state_test-EOA-balance_0]\ntest_ext_code_on_set_code[fork_Prague-state_test-EOA-balance_1]\ntest_ext_code_on_set_code[fork_Prague-state_test-EOA_WITH_SET_CODE-balance_0]\ntest_ext_code_on_set_code[fork_Prague-state_test-EOA_WITH_SET_CODE-balance_1]\ntest_ext_code_on_set_code[fork_Prague-state_test-CONTRACT-balance_0]\ntest_ext_code_on_set_code[fork_Prague-state_test-CONTRACT-balance_1]\ntest_ext_code_on_self_set_code[fork_Prague-blockchain_test-balance_0]\ntest_ext_code_on_self_set_code[fork_Prague-blockchain_test-balance_1]\ntest_ext_code_on_self_set_code[fork_Prague-blockchain_test_engine-balance_0]\ntest_ext_code_on_self_set_code[fork_Prague-blockchain_test_engine-balance_1]\ntest_ext_code_on_self_set_code[fork_Prague-state_test-balance_0]\ntest_ext_code_on_self_set_code[fork_Prague-state_test-balance_1]\ntest_set_code_address_and_authority_warm_state[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test-call_set_code_address_first_then_authority]\ntest_set_code_address_and_authority_warm_state[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test-call_authority_first_then_set_code_address]\ntest_set_code_address_and_authority_warm_state[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine-call_set_code_address_first_then_authority]\ntest_set_code_address_and_authority_warm_state[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine-call_authority_first_then_set_code_address]\ntest_set_code_address_and_authority_warm_state[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test-call_set_code_address_first_then_authority]\ntest_set_code_address_and_authority_warm_state[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-state_test-call_authority_first_then_set_code_address]\ntest_ext_code_on_self_delegating_set_code[fork_Prague-blockchain_test-balance_0]\ntest_ext_code_on_self_delegating_set_code[fork_Prague-blockchain_test-balance_1]\ntest_ext_code_on_self_delegating_set_code[fork_Prague-blockchain_test_engine-balance_0]\ntest_ext_code_on_self_delegating_set_code[fork_Prague-blockchain_test_engine-balance_1]\ntest_ext_code_on_self_delegating_set_code[fork_Prague-state_test-balance_0]\ntest_ext_code_on_self_delegating_set_code[fork_Prague-state_test-balance_1]\ntest_ext_code_on_chain_delegating_set_code[fork_Prague-blockchain_test]\ntest_ext_code_on_chain_delegating_set_code[fork_Prague-blockchain_test_engine]\ntest_ext_code_on_chain_delegating_set_code[fork_Prague-state_test]\ntest_self_code_on_set_code[fork_Prague-blockchain_test-balance_0]\ntest_self_code_on_set_code[fork_Prague-blockchain_test-balance_1]\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_1]\ntest_self_code_on_set_code[fork_Prague-state_test-balance_0]\ntest_self_code_on_set_code[fork_Prague-state_test-balance_1]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-create_opcode_CREATE2-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-create_opcode_CREATE2-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-create_opcode_CREATE2-evm_code_type_LEGACY-state_test]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-create_opcode_CREATE-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-create_opcode_CREATE-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_account_deployed_in_same_tx[fork_Prague-create_opcode_CREATE-evm_code_type_LEGACY-state_test]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE-call_set_code_first_False-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE-call_set_code_first_False-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE-call_set_code_first_False-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE-call_set_code_first_False-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE-call_set_code_first_True-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE-call_set_code_first_True-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE-call_set_code_first_True-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE-call_set_code_first_True-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE2-call_set_code_first_False-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE2-call_set_code_first_False-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE2-call_set_code_first_False-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE2-call_set_code_first_False-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE2-call_set_code_first_True-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE2-call_set_code_first_True-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE2-call_set_code_first_True-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test-create_opcode_CREATE2-call_set_code_first_True-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_set_code_first_False-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_set_code_first_False-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_set_code_first_False-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_set_code_first_False-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_set_code_first_True-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_set_code_first_True-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_set_code_first_True-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE-call_set_code_first_True-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE2-call_set_code_first_False-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE2-call_set_code_first_False-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE2-call_set_code_first_False-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE2-call_set_code_first_False-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE2-call_set_code_first_True-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE2-call_set_code_first_True-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE2-call_set_code_first_True-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-blockchain_test_engine-create_opcode_CREATE2-call_set_code_first_True-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE-call_set_code_first_False-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE-call_set_code_first_False-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE-call_set_code_first_False-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE-call_set_code_first_False-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE-call_set_code_first_True-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE-call_set_code_first_True-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE-call_set_code_first_True-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE-call_set_code_first_True-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE2-call_set_code_first_False-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE2-call_set_code_first_False-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE2-call_set_code_first_False-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE2-call_set_code_first_False-balance_1-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE2-call_set_code_first_True-balance_0-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE2-call_set_code_first_True-balance_0-external_sendall_recipient_True]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE2-call_set_code_first_True-balance_1-external_sendall_recipient_False]\ntest_set_code_to_self_destructing_account_deployed_in_same_tx[fork_Prague-state_test-create_opcode_CREATE2-call_set_code_first_True-balance_1-external_sendall_recipient_True]\ntest_set_code_multiple_first_valid_authorization_tuples_same_signer[fork_Prague-blockchain_test]\ntest_set_code_multiple_first_valid_authorization_tuples_same_signer[fork_Prague-blockchain_test_engine]\ntest_set_code_multiple_first_valid_authorization_tuples_same_signer[fork_Prague-state_test]\ntest_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce[fork_Prague-blockchain_test]\ntest_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce[fork_Prague-blockchain_test_engine]\ntest_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce[fork_Prague-state_test]\ntest_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce_self_sponsored[fork_Prague-blockchain_test]\ntest_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce_self_sponsored[fork_Prague-blockchain_test_engine]\ntest_set_code_multiple_valid_authorization_tuples_same_signer_increasing_nonce_self_sponsored[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_all_invalid_authorization_tuples[fork_Prague-blockchain_test]\ntest_set_code_all_invalid_authorization_tuples[fork_Prague-blockchain_test_engine]\ntest_set_code_all_invalid_authorization_tuples[fork_Prague-state_test]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test-invalidity_reason_InvalidityReason.NONCE-transaction_exception_None]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test-invalidity_reason_InvalidityReason.MULTIPLE_NONCE-transaction_exception_None]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test-invalidity_reason_InvalidityReason.CHAIN_ID-transaction_exception_None]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test-invalidity_reason_InvalidityReason.EMPTY_AUTHORIZATION_LIST-transaction_exception_TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test_engine-invalidity_reason_InvalidityReason.NONCE-transaction_exception_None]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test_engine-invalidity_reason_InvalidityReason.MULTIPLE_NONCE-transaction_exception_None]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test_engine-invalidity_reason_InvalidityReason.CHAIN_ID-transaction_exception_None]\ntest_set_code_invalid_authorization_tuple[fork_Prague-blockchain_test_engine-invalidity_reason_InvalidityReason.EMPTY_AUTHORIZATION_LIST-transaction_exception_TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST]\ntest_set_code_invalid_authorization_tuple[fork_Prague-state_test-invalidity_reason_InvalidityReason.NONCE-transaction_exception_None]\ntest_set_code_invalid_authorization_tuple[fork_Prague-state_test-invalidity_reason_InvalidityReason.MULTIPLE_NONCE-transaction_exception_None]\ntest_set_code_invalid_authorization_tuple[fork_Prague-state_test-invalidity_reason_InvalidityReason.CHAIN_ID-transaction_exception_None]\ntest_set_code_invalid_authorization_tuple[fork_Prague-state_test-invalidity_reason_InvalidityReason.EMPTY_AUTHORIZATION_LIST-transaction_exception_TransactionException.TYPE_4_EMPTY_AUTHORIZATION_LIST]\ntest_set_code_using_chain_specific_id[fork_Prague-blockchain_test]\ntest_set_code_using_chain_specific_id[fork_Prague-blockchain_test_engine]\ntest_set_code_using_chain_specific_id[fork_Prague-state_test]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=0,r=1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=1,r=1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=2,r=1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=1,r=0,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=1,r=1,s=0]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=0,r=SECP256K1N,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=0,r=SECP256K1N-1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=0,r=SECP256K1N-2,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=1,r=SECP256K1N-2,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=0,r=1,s=SECP256K1N_OVER_2]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=1,r=1,s=SECP256K1N_OVER_2]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test-v=0,r=1,s=SECP256K1N_OVER_2+1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=0,r=1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=1,r=1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=2,r=1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=1,r=0,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=1,r=1,s=0]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=0,r=SECP256K1N,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=0,r=SECP256K1N-1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=0,r=SECP256K1N-2,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=1,r=SECP256K1N-2,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=0,r=1,s=SECP256K1N_OVER_2]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=1,r=1,s=SECP256K1N_OVER_2]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-blockchain_test_engine-v=0,r=1,s=SECP256K1N_OVER_2+1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=0,r=1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=1,r=1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=2,r=1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=1,r=0,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=1,r=1,s=0]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=0,r=SECP256K1N,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=0,r=SECP256K1N-1,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=0,r=SECP256K1N-2,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=1,r=SECP256K1N-2,s=1]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=0,r=1,s=SECP256K1N_OVER_2]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=1,r=1,s=SECP256K1N_OVER_2]\ntest_set_code_using_valid_synthetic_signatures[fork_Prague-state_test-v=0,r=1,s=SECP256K1N_OVER_2+1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-blockchain_test-v_2,r_1,s_1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-blockchain_test-v_0,r_1,s_SECP256K1N_OVER_2+1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-blockchain_test-v_2**256-1,r_1,s_1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-blockchain_test-v_0,r_1,s_2**256-1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-blockchain_test_engine-v_2,r_1,s_1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-blockchain_test_engine-v_0,r_1,s_SECP256K1N_OVER_2+1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-blockchain_test_engine-v_2**256-1,r_1,s_1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-blockchain_test_engine-v_0,r_1,s_2**256-1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-state_test-v_2,r_1,s_1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-state_test-v_0,r_1,s_SECP256K1N_OVER_2+1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-state_test-v_2**256-1,r_1,s_1]\ntest_invalid_tx_invalid_auth_signature[fork_Prague-state_test-v_0,r_1,s_2**256-1]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test-v_1,r_0,s_1]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test-v_1,r_1,s_0]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test-v_0,r_SECP256K1N,s_1]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test-v_0,r_SECP256K1N-1,s_1]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test-v_0,r_1,s_SECP256K1N_OVER_2]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test-v_0,r_1,s_SECP256K1N_OVER_2_minus_one]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test-v_1,r_2**256-1,s_1]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test_engine-v_1,r_0,s_1]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test_engine-v_1,r_1,s_0]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test_engine-v_0,r_SECP256K1N,s_1]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test_engine-v_0,r_SECP256K1N-1,s_1]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test_engine-v_0,r_1,s_SECP256K1N_OVER_2]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test_engine-v_0,r_1,s_SECP256K1N_OVER_2_minus_one]\ntest_set_code_using_invalid_signatures[fork_Prague-blockchain_test_engine-v_1,r_2**256-1,s_1]\ntest_set_code_using_invalid_signatures[fork_Prague-state_test-v_1,r_0,s_1]\ntest_set_code_using_invalid_signatures[fork_Prague-state_test-v_1,r_1,s_0]\ntest_set_code_using_invalid_signatures[fork_Prague-state_test-v_0,r_SECP256K1N,s_1]\ntest_set_code_using_invalid_signatures[fork_Prague-state_test-v_0,r_SECP256K1N-1,s_1]\ntest_set_code_using_invalid_signatures[fork_Prague-state_test-v_0,r_1,s_SECP256K1N_OVER_2]\ntest_set_code_using_invalid_signatures[fork_Prague-state_test-v_0,r_1,s_SECP256K1N_OVER_2_minus_one]\ntest_set_code_using_invalid_signatures[fork_Prague-state_test-v_1,r_2**256-1,s_1]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-blockchain_test-log_opcode_LOG0]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-blockchain_test-log_opcode_LOG1]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-blockchain_test-log_opcode_LOG2]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-blockchain_test-log_opcode_LOG3]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-blockchain_test-log_opcode_LOG4]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-log_opcode_LOG0]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-log_opcode_LOG1]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-log_opcode_LOG2]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-log_opcode_LOG3]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-blockchain_test_engine-log_opcode_LOG4]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-state_test-log_opcode_LOG0]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-state_test-log_opcode_LOG1]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-state_test-log_opcode_LOG2]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-state_test-log_opcode_LOG3]\ntest_set_code_to_log[fork_Prague-evm_code_type_LEGACY-state_test-log_opcode_LOG4]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000b-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000b-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000b-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000c-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000c-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000c-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000d-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000d-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000d-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000e-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000e-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000e-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000f-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000f-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000f-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000010-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000010-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000010-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000011-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000011-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000011-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000012-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000012-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000012-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000013-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000013-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000013-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000a-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000a-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x000000000000000000000000000000000000000a-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000009-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000009-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000009-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000005-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000005-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000005-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000006-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000006-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000006-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000007-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000007-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000007-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000008-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000008-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000008-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000001-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000001-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000001-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000002-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000002-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000002-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000003-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000003-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000003-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000004-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000004-call_opcode_CALL-evm_code_type_LEGACY-blockchain_test_engine]\ntest_set_code_to_precompile[fork_Prague-precompile_0x0000000000000000000000000000000000000004-call_opcode_CALL-evm_code_type_LEGACY-state_test]\ntest_set_code_to_system_contract[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-system_contract_0x00000000219ab540356cbb839cbe05303d7705fa-blockchain_test]\ntest_set_code_to_system_contract[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-system_contract_0x00000000219ab540356cbb839cbe05303d7705fa-blockchain_test_engine]\ntest_set_code_to_system_contract[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-system_contract_0x00a3ca265ebcb825b45f985a16cefb49958ce017-blockchain_test]\ntest_set_code_to_system_contract[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-system_contract_0x00a3ca265ebcb825b45f985a16cefb49958ce017-blockchain_test_engine]\ntest_set_code_to_system_contract[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-system_contract_0x00b42dbf2194e931e80326d950320f7d9dbeac02-blockchain_test]\ntest_set_code_to_system_contract[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-system_contract_0x00b42dbf2194e931e80326d950320f7d9dbeac02-blockchain_test_engine]\ntest_set_code_to_system_contract[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-system_contract_0x0aae40965e6800cd9b1f4b05ff21581047e3f91e-blockchain_test]\ntest_set_code_to_system_contract[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-system_contract_0x0aae40965e6800cd9b1f4b05ff21581047e3f91e-blockchain_test_engine]\ntest_set_code_to_system_contract[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-system_contract_0x000f3df6d732807ef1319fb7b8bb8522d0beac02-blockchain_test]\ntest_set_code_to_system_contract[fork_Prague-call_opcode_CALL-evm_code_type_LEGACY-system_contract_0x000f3df6d732807ef1319fb7b8bb8522d0beac02-blockchain_test_engine]\ntest_eoa_tx_after_set_code[fork_Prague-tx_type_3-evm_code_type_LEGACY-blockchain_test]\ntest_eoa_tx_after_set_code[fork_Prague-tx_type_3-evm_code_type_LEGACY-blockchain_test_engine]\ntest_eoa_tx_after_set_code[fork_Prague-tx_type_2-evm_code_type_LEGACY-blockchain_test]\ntest_eoa_tx_after_set_code[fork_Prague-tx_type_2-evm_code_type_LEGACY-blockchain_test_engine]\ntest_eoa_tx_after_set_code[fork_Prague-tx_type_1-evm_code_type_LEGACY-blockchain_test]\ntest_eoa_tx_after_set_code[fork_Prague-tx_type_1-evm_code_type_LEGACY-blockchain_test_engine]\ntest_eoa_tx_after_set_code[fork_Prague-tx_type_0-evm_code_type_LEGACY-blockchain_test]\ntest_eoa_tx_after_set_code[fork_Prague-tx_type_0-evm_code_type_LEGACY-blockchain_test_engine]\ntest_reset_code[fork_Prague-blockchain_test-not_self_sponsored]\ntest_reset_code[fork_Prague-blockchain_test-self_sponsored]\ntest_reset_code[fork_Prague-blockchain_test_engine-not_self_sponsored]\ntest_reset_code[fork_Prague-blockchain_test_engine-self_sponsored]\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_set_code_tx/test_set_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: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:
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:
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:test_push0_contracts(state_test, env, pre, post, sender, contract_code, expected_storage)
","text":"Tests PUSH0 within various deployed contracts.
Source code intests/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 intests/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 intests/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 intests/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: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 intests/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:
Initcode must be within a valid EIP-3860 length.
Source code intests/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 intests/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 intests/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 intests/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:
tx_in_withdrawals_block
: Test that the withdrawal value can not be used by a transaction in the same block as the withdrawal.
tx_after_withdrawals_block
: Test that the withdrawal value can be used by a transaction in the subsequent block.
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 intests/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 intests/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 intests/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:
A single block.
Multiple blocks.
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 intests/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 intests/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.
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 intests/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 intests/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:
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 intests/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 intests/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:
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
.
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.
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:
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.
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)
.
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
).
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:
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:
6001
is PUSH1
with the value 0x01
.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>
.
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:
test_
python function to an existing file in any of the existing category subdirectories within tests
.tests
with the appropriate source files and test functions.The Python code in the tests subdirectory ./tests
must fulfill the following checks:
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:
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:
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.
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.
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 ExplanationREFERENCE_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.
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).
@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.
@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.
@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:
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.
@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.
@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.
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.
@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:
@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:
State tests span a single block and, ideally, a single transaction. For example:
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:
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":"Executingtox
","text":""},{"location":"writing_tests/verifying_changes/#prerequisites","title":"Prerequisites","text":"python -m venv ./venv/\nsource ./venv/bin/activate\npip install tox-uv\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":"Executingtox
Environments Individually","text":"There are three tox environments available:
framework
: Lint and test framework and libraries related code in src/
.tests
: Lint and test the test cases in tests/
(runs fill
on all forks deployed to mainnet).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:
pyspelling
:
sudo apt-get install aspell aspell-en\n
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:
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:
FunctionClassModuleimport 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:
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.
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.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.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.
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.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.
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.
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 Defaultdefaults
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.
requiredcases
List[ParameterSet]
A list of pytest.param
objects representing different test cases. Its first argument must be a dictionary defining parameter names and values.
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 DescriptionDict[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.
@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 cases
must contain exactly one value, which is a dictionary of parameter values.cases
list, so the original cases
list is modified.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/tests/berlin/eip2930_access_list/index.html b/main/tests/berlin/eip2930_access_list/index.html
index 89e7f9fad2..763bdbc468 100644
--- a/main/tests/berlin/eip2930_access_list/index.html
+++ b/main/tests/berlin/eip2930_access_list/index.html
@@ -13710,7 +13710,7 @@
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 5eaf50b645..96edd25b0d 100644
--- a/main/tests/berlin/eip2930_access_list/test_acl/index.html
+++ b/main/tests/berlin/eip2930_access_list/test_acl/index.html
@@ -13721,7 +13721,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 1a1c0227a5..f0bd1b3e12 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
@@ -13707,7 +13707,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 deff188e5c..4bee7efec0 100644
--- a/main/tests/berlin/index.html
+++ b/main/tests/berlin/index.html
@@ -13708,7 +13708,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 21646f2b01..0d00615290 100644
--- a/main/tests/byzantium/eip198_modexp_precompile/index.html
+++ b/main/tests/byzantium/eip198_modexp_precompile/index.html
@@ -13710,7 +13710,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 a1f1d71bc4..70dbb0bcb5 100644
--- a/main/tests/byzantium/eip198_modexp_precompile/test_modexp/index.html
+++ b/main/tests/byzantium/eip198_modexp_precompile/test_modexp/index.html
@@ -13721,7 +13721,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 74cd75ad76..2adc6b46e0 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
@@ -13707,7 +13707,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 7d43ad4116..c3adb89f30 100644
--- a/main/tests/byzantium/index.html
+++ b/main/tests/byzantium/index.html
@@ -13708,7 +13708,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 cfdf4f7f5a..b07b733263 100644
--- a/main/tests/cancun/eip1153_tstore/index.html
+++ b/main/tests/cancun/eip1153_tstore/index.html
@@ -13710,7 +13710,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 40017ac1cb..07e8664b65 100644
--- a/main/tests/cancun/eip1153_tstore/spec/index.html
+++ b/main/tests/cancun/eip1153_tstore/spec/index.html
@@ -13777,7 +13777,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 e634fd165d..79758c7850 100644
--- a/main/tests/cancun/eip1153_tstore/test_basic_tload/index.html
+++ b/main/tests/cancun/eip1153_tstore/test_basic_tload/index.html
@@ -13757,7 +13757,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 07d2a622d0..3763a56479 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
@@ -13707,7 +13707,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 3b1f091266..c8b7b671a1 100644
--- a/main/tests/cancun/eip1153_tstore/test_tload_calls/index.html
+++ b/main/tests/cancun/eip1153_tstore/test_tload_calls/index.html
@@ -13721,7 +13721,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 cfd11bd9f1..195c932061 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
@@ -13707,7 +13707,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 fd3abc376d..5d2db86614 100644
--- a/main/tests/cancun/eip1153_tstore/test_tload_reentrancy/index.html
+++ b/main/tests/cancun/eip1153_tstore/test_tload_reentrancy/index.html
@@ -13721,7 +13721,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 5311800d99..7227997479 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
@@ -13707,7 +13707,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 37e169d6d0..91f7f3b6cc 100644
--- a/main/tests/cancun/eip1153_tstore/test_tstorage/index.html
+++ b/main/tests/cancun/eip1153_tstore/test_tstorage/index.html
@@ -13766,7 +13766,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 5dd2533add..d37350ead0 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
@@ -13707,7 +13707,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 403ce10b35..b858e59a6f 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
@@ -13736,7 +13736,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 9b46af7a89..a007d62179 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
@@ -13707,7 +13707,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 94d359ff04..8a9ce9a0eb 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
@@ -13721,7 +13721,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 1022b012e0..337f8fb07c 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
@@ -13707,7 +13707,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 3d4af9723d..c80671f39b 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
@@ -13721,7 +13721,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 80898264fa..f08b9dd0c7 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
@@ -13707,7 +13707,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 a88e12d92f..e5466c5112 100644
--- a/main/tests/cancun/eip1153_tstore/test_tstorage_selfdestruct/index.html
+++ b/main/tests/cancun/eip1153_tstore/test_tstorage_selfdestruct/index.html
@@ -13721,7 +13721,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 1630b97958..d491296bef 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
@@ -13707,7 +13707,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 adf9a007dd..96b11cedc8 100644
--- a/main/tests/cancun/eip1153_tstore/test_tstore_reentrancy/index.html
+++ b/main/tests/cancun/eip1153_tstore/test_tstore_reentrancy/index.html
@@ -13721,7 +13721,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 dfba8528f0..8c611d3d23 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
@@ -13707,7 +13707,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 7d0b0f2553..2e45879df7 100644
--- a/main/tests/cancun/eip4788_beacon_root/index.html
+++ b/main/tests/cancun/eip4788_beacon_root/index.html
@@ -13710,7 +13710,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 96b8acf874..0e686bd1de 100644
--- a/main/tests/cancun/eip4788_beacon_root/spec/index.html
+++ b/main/tests/cancun/eip4788_beacon_root/spec/index.html
@@ -13795,7 +13795,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 3fc23bf471..39c1e4fef0 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
@@ -13811,7 +13811,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 605dd5a2e7..00bb1b1c75 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
@@ -13707,7 +13707,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 6ce6744ad4..e6de82d11e 100644
--- a/main/tests/cancun/eip4844_blobs/index.html
+++ b/main/tests/cancun/eip4844_blobs/index.html
@@ -13710,7 +13710,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/spec/index.html b/main/tests/cancun/eip4844_blobs/spec/index.html
index 3823f01a87..6fac9a3919 100644
--- a/main/tests/cancun/eip4844_blobs/spec/index.html
+++ b/main/tests/cancun/eip4844_blobs/spec/index.html
@@ -13795,7 +13795,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 53eedb96cc..ce889b21ee 100644
--- a/main/tests/cancun/eip4844_blobs/test_blob_txs/index.html
+++ b/main/tests/cancun/eip4844_blobs/test_blob_txs/index.html
@@ -13883,7 +13883,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 2aced85e9e..65aff6fb5c 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
@@ -13707,7 +13707,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 b1b47c7536..0509a07038 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
@@ -13721,7 +13721,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 5f493da329..563b3f9d60 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
@@ -13707,7 +13707,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 d1681d2482..95fb9d85b0 100644
--- a/main/tests/cancun/eip4844_blobs/test_blobhash_opcode/index.html
+++ b/main/tests/cancun/eip4844_blobs/test_blobhash_opcode/index.html
@@ -13748,7 +13748,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 1eb32cf6f7..557493cb3c 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
@@ -13707,7 +13707,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 aaf71935c5..52a43626a6 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
@@ -13721,7 +13721,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 fece9aca5b..0b2aad8404 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
@@ -13707,7 +13707,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 19f4df061c..7f40995b64 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
@@ -13820,7 +13820,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 47faeecaf5..91bea2ac26 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
@@ -13707,7 +13707,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 5a3b51d3ea..b452df5ec3 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
@@ -13739,7 +13739,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 9682e81c1a..12952db6c6 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
@@ -13707,7 +13707,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 4a409a05d3..5360afafce 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
@@ -13775,7 +13775,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 03a95ba6d8..43eb01be72 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
@@ -13707,7 +13707,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 0f44236dd6..fd3f05dd47 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
@@ -13721,7 +13721,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 df078c9566..858dcada93 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
@@ -13707,7 +13707,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 da4de8c73e..b01f94fde9 100644
--- a/main/tests/cancun/eip5656_mcopy/index.html
+++ b/main/tests/cancun/eip5656_mcopy/index.html
@@ -13710,7 +13710,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 0a701a8c34..1f07d47054 100644
--- a/main/tests/cancun/eip5656_mcopy/test_mcopy/index.html
+++ b/main/tests/cancun/eip5656_mcopy/test_mcopy/index.html
@@ -13730,7 +13730,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 8150b5dc87..64c6a07be9 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
@@ -13707,7 +13707,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 cecf3c30b0..c6c283d6b7 100644
--- a/main/tests/cancun/eip5656_mcopy/test_mcopy_contexts/index.html
+++ b/main/tests/cancun/eip5656_mcopy/test_mcopy_contexts/index.html
@@ -13730,7 +13730,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 0adbca314b..429e6ac47c 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
@@ -13707,7 +13707,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 745f9d6d6f..dd1db0a2a4 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
@@ -13730,7 +13730,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 274e43226e..e99dd04fe7 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
@@ -13707,7 +13707,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 8c14787cfc..cda3882a96 100644
--- a/main/tests/cancun/eip6780_selfdestruct/index.html
+++ b/main/tests/cancun/eip6780_selfdestruct/index.html
@@ -13710,7 +13710,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 9232351c4b..ac2c63c840 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
@@ -13739,7 +13739,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 d95c34a4a6..cb7f53ccd9 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
@@ -13707,7 +13707,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 4bb4f1023c..c2daf6647a 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
@@ -13721,7 +13721,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 66b3cf7537..00fdaea16e 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
@@ -13707,7 +13707,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 f4e70edee2..7cef4e5c00 100644
--- a/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct/index.html
+++ b/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct/index.html
@@ -13793,7 +13793,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 11a21d05ab..c8f384e508 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
@@ -13707,7 +13707,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 775ca62fec..c20106cd95 100644
--- a/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert/index.html
+++ b/main/tests/cancun/eip6780_selfdestruct/test_selfdestruct_revert/index.html
@@ -13730,7 +13730,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 acf7ec3f0d..88a6b1500c 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
@@ -13707,7 +13707,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 2659e8c018..b643992572 100644
--- a/main/tests/cancun/eip7516_blobgasfee/index.html
+++ b/main/tests/cancun/eip7516_blobgasfee/index.html
@@ -13710,7 +13710,7 @@