Skip to content

test_cross_version_creates_fail()

Documentation for tests/osaka/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py::test_cross_version_creates_fail@008e492e.

Generate fixtures for these test cases for Osaka with:

fill -v tests/osaka/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py::test_cross_version_creates_fail --fork Osaka

Verifies that CREATE and CREATE2 cannot create EOF contracts.

Source code in tests/osaka/eip7692_eof_v1/eip7620_eof_create/test_legacy_eof_creates.py
27
28
29
30
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
@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.

Test ID (Abbreviated) deploy_code legacy_create_opcode
...fork_Osaka-state_test-deploy_eof_initcontainer-CREATE Initcode Subcontainer CREATE
...fork_Osaka-state_test-deploy_eof_initcontainer-CREATE2 Initcode Subcontainer CREATE2
...fork_Osaka-state_test-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
...fork_Osaka-state_test-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
...fork_Osaka-blockchain_test_from_state_test-deploy_eof_initcontainer-CREATE Initcode Subcontainer CREATE
...fork_Osaka-blockchain_test_from_state_test-deploy_eof_initcontainer-CREATE2 Initcode Subcontainer CREATE2
...fork_Osaka-blockchain_test_from_state_test-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
...fork_Osaka-blockchain_test_from_state_test-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