Skip to content

test_cross_version_creates_fail()

Documentation for tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py::test_cross_version_creates_fail@verkle@v0.0.6.

Generate fixtures for these test cases for Pragueeip7692 with:

Pragueeip7692 only:

fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py::test_cross_version_creates_fail --fork=PragueEIP7692 --evm-bin=/path/to/evm-tool-dev-version

For all forks up to and including Pragueeip7692:

fill -v tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py::test_cross_version_creates_fail --until=PragueEIP7692

Verifies that CREATE and CREATE2 cannot create EOF contracts

Source code in tests/prague/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
@pytest.mark.parametrize(
    "legacy_create_opcode",
    [
        pytest.param(Op.CREATE, id="CREATE"),
        pytest.param(Op.CREATE2, id="CREATE2"),
    ],
)
@pytest.mark.parametrize(
    "deploy_code",
    [
        pytest.param(smallest_initcode_subcontainer, id="deploy_eof_initcontainer"),
        pytest.param(smallest_runtime_subcontainer, id="deploy_eof_container"),
    ],
)
def test_cross_version_creates_fail(
    state_test: StateTestFiller,
    pre: Alloc,
    legacy_create_opcode: Opcodes,
    deploy_code: Container,
):
    """
    Verifies that CREATE and CREATE2 cannot create EOF contracts
    """
    env = Environment()
    salt_param = [0] if legacy_create_opcode == Op.CREATE2 else []
    sender = pre.fund_eoa()
    contract_address = pre.deploy_contract(
        code=Op.CALLDATACOPY(0, 0, Op.CALLDATASIZE)
        + Op.SSTORE(slot_create_address, legacy_create_opcode(0, 0, Op.CALLDATASIZE, *salt_param))
        + Op.SSTORE(slot_code_worked, value_code_worked)
        + Op.STOP
    )

    # Storage in 0 should be empty as the create/create2 should fail,
    # and 1 in 1 to show execution continued and did not halt
    post = {
        contract_address: Account(
            storage={
                slot_create_address: EOFCREATE_FAILURE,
                slot_code_worked: value_code_worked,
            }
        )
    }
    tx = Transaction(
        to=contract_address,
        gas_limit=10_000_000,
        gas_price=10,
        protected=False,
        sender=sender,
        data=deploy_code,
    )

    state_test(
        env=env,
        pre=pre,
        post=post,
        tx=tx,
    )

Parametrized Test Cases

The interactive table below is also available as a standalone page.

Skipped Parameters

For more concise readability, the table below does not list the following parameter values: fork, blockchain_test, state_test, state_test_only, eof_test, eof_state_test.

Test ID deploy_code legacy_create_opcode
deploy_eof_initcontainer-CREATE Initcode Subcontainer CREATE
deploy_eof_initcontainer-CREATE2 Initcode Subcontainer CREATE2
deploy_eof_container-CREATE b'\xef\x00\x01\x01\x00\x04\x02\x00\x01\x00\x01\x04\x00\x00\x00\x00\x80\x00\x00\x00' CREATE
deploy_eof_container-CREATE2 b'\xef\x00\x01\x01\x00\x04\x02\x00\x01\x00\x01\x04\x00\x00\x00\x00\x80\x00\x00\x00' CREATE2
deploy_eof_initcontainer-CREATE Initcode Subcontainer CREATE
deploy_eof_initcontainer-CREATE2 Initcode Subcontainer CREATE2
deploy_eof_container-CREATE b'\xef\x00\x01\x01\x00\x04\x02\x00\x01\x00\x01\x04\x00\x00\x00\x00\x80\x00\x00\x00' CREATE
deploy_eof_container-CREATE2 b'\xef\x00\x01\x01\x00\x04\x02\x00\x01\x00\x01\x04\x00\x00\x00\x00\x80\x00\x00\x00' CREATE2