Skip to content

test_slotnum_initcode_create()

Documentation for tests/amsterdam/eip7843_slotnum/test_slotnum.py::test_slotnum_initcode_create@ffe48572.

Generate fixtures for these test cases for Bogota with:

fill -v tests/amsterdam/eip7843_slotnum/test_slotnum.py::test_slotnum_initcode_create --fork Bogota

Test SLOTNUM inside initcode executed via CREATE and CREATE2.

Source code in tests/amsterdam/eip7843_slotnum/test_slotnum.py
@EIPChecklist.Opcode.Test.ExecutionContext.Initcode.Behavior()
@EIPChecklist.Opcode.Test.ExecutionContext.Initcode.Behavior.Opcode()
@pytest.mark.parametrize("opcode", [Op.CREATE, Op.CREATE2])
def test_slotnum_initcode_create(
    state_test: StateTestFiller,
    pre: Alloc,
    opcode: Op,
) -> None:
    """
    Test SLOTNUM inside initcode executed via CREATE and CREATE2.
    """
    slot_number = 0xC0FFEE

    init_code = Op.SSTORE(0, Op.SLOTNUM)

    factory_code = (
        Op.CALLDATACOPY(offset=0, size=len(init_code))
        + opcode(offset=0, size=len(init_code))
        + Op.STOP
    )
    factory_address = pre.deploy_contract(factory_code)

    created_contract_address = compute_create_address(
        address=factory_address,
        nonce=1,
        initcode=init_code,
        opcode=opcode,
    )

    tx = Transaction(
        to=factory_address,
        data=init_code,
        sender=pre.fund_eoa(),
    )

    post = {
        created_contract_address: Account(storage={0: slot_number}),
    }

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

Parametrized Test Cases

This test generates 2 parametrized test cases across 2 forks.