Skip to content

test_extcodehash_of_empty()

Documentation for tests/constantinople/eip1052_extcodehash/test_extcodehash.py::test_extcodehash_of_empty@b47f0253.

Generate fixtures for these test cases for Amsterdam with:

fill -v tests/constantinople/eip1052_extcodehash/test_extcodehash.py::test_extcodehash_of_empty --fork Amsterdam

Test EXTCODEHASH/EXTCODESIZE for non-existent and empty accounts.

Source code in tests/constantinople/eip1052_extcodehash/test_extcodehash.py
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
@pytest.mark.ported_from(
    [
        "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stExtCodeHash/extCodeHashNonExistingAccountFiller.yml",  # noqa: E501
        "https://github.com/ethereum/tests/blob/v13.3/src/GeneralStateTestsFiller/stExtCodeHash/extCodeHashAccountWithoutCodeFiller.yml",  # noqa: E501
    ],
    pr=["https://github.com/ethereum/execution-specs/pull/2237"],
)
@pytest.mark.parametrize("target_exists", [True, False])
def test_extcodehash_of_empty(
    state_test: StateTestFiller,
    pre: Alloc,
    target_exists: bool,
) -> None:
    """
    Test EXTCODEHASH/EXTCODESIZE for non-existent and empty accounts.
    """
    storage = Storage()
    target_address = pre.nonexistent_account()

    if target_exists:
        pre.fund_address(target_address, 1)

    expected_hash = keccak256(b"") if target_exists else 0
    code = Op.SSTORE(
        storage.store_next(expected_hash),
        Op.EXTCODEHASH(target_address),
    ) + Op.SSTORE(
        storage.store_next(0),
        Op.EXTCODESIZE(target_address),
    )

    code_address = pre.deploy_contract(code, storage=storage.canary())

    tx = Transaction(
        sender=(pre.fund_eoa()),
        to=code_address,
        value=1,
        gas_limit=400_000,
    )

    state_test(
        pre=pre,
        post={
            code_address: Account(storage=storage),
        },
        tx=tx,
    )

Parametrized Test Cases

This test generates 2 parametrized test cases across 10 forks.