Skip to content

test_slotnum_value()

Documentation for tests/amsterdam/eip7843_slotnum/test_slotnum.py::test_slotnum_value@b2fd7c77.

Generate fixtures for these test cases for Amsterdam with:

fill -v tests/amsterdam/eip7843_slotnum/test_slotnum.py::test_slotnum_value --fork Amsterdam

Test that SLOTNUM opcode returns the correct slot number.

The slot number is provided by the consensus layer and should be accessible via the SLOTNUM opcode (0x4B).

Source code in tests/amsterdam/eip7843_slotnum/test_slotnum.py
22
23
24
25
26
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
@pytest.mark.parametrize(
    "slot_number",
    [
        pytest.param(0, id="slot_zero"),
        pytest.param(1, id="slot_one"),
        pytest.param(0x1000, id="slot_4096"),
        pytest.param(2**32, id="slot_large"),
        pytest.param(2**64 - 1, id="slot_max_u64"),
    ],
)
def test_slotnum_value(
    state_test: StateTestFiller,
    pre: Alloc,
    slot_number: int,
) -> None:
    """
    Test that SLOTNUM opcode returns the correct slot number.

    The slot number is provided by the consensus layer and should be
    accessible via the SLOTNUM opcode (0x4B).
    """
    # Store SLOTNUM result at storage key 0
    code = Op.SSTORE(0, Op.SLOTNUM)
    code_address = pre.deploy_contract(code)

    tx = Transaction(
        sender=pre.fund_eoa(),
        gas_limit=100_000,
        to=code_address,
    )

    post = {
        code_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 5 parametrized test cases across 1 fork.