Skip to content

test_ext_calls_gas()

Documentation for tests/osaka/eip7692_eof_v1/eip7069_extcall/test_gas.py::test_ext_calls_gas@008e492e.

Generate fixtures for these test cases for Osaka with:

fill -v tests/osaka/eip7692_eof_v1/eip7069_extcall/test_gas.py::test_ext_calls_gas --fork Osaka

Tests variations of EXT*CALL gas, both warm and cold, without and with mem expansions.

Source code in tests/osaka/eip7692_eof_v1/eip7069_extcall/test_gas.py
 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
 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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
@pytest.mark.parametrize(
    ["opcode", "pre_setup", "cold_gas", "warm_gas", "new_account"],
    [
        pytest.param(
            Op.EXTCALL,
            Op.PUSH0,
            COLD_ACCOUNT_ACCESS_GAS,
            WARM_ACCOUNT_ACCESS_GAS,
            False,
            id="EXTCALL",
        ),
        pytest.param(
            Op.EXTCALL,
            Op.PUSH1(1),
            COLD_ACCOUNT_ACCESS_GAS + CALL_WITH_VALUE_GAS,
            WARM_ACCOUNT_ACCESS_GAS + CALL_WITH_VALUE_GAS,
            False,
            id="EXTCALL_with_value",
        ),
        pytest.param(
            Op.EXTDELEGATECALL,
            Op.NOOP,
            COLD_ACCOUNT_ACCESS_GAS,
            WARM_ACCOUNT_ACCESS_GAS,
            False,
            id="EXTDELEGATECALL",
        ),
        pytest.param(
            Op.EXTSTATICCALL,
            Op.NOOP,
            COLD_ACCOUNT_ACCESS_GAS,
            WARM_ACCOUNT_ACCESS_GAS,
            False,
            id="EXTSTATICCALL",
        ),
        pytest.param(
            Op.EXTCALL,
            Op.PUSH0,
            COLD_ACCOUNT_ACCESS_GAS,
            WARM_ACCOUNT_ACCESS_GAS,
            True,
            id="EXTCALL_new_acc",
        ),
        pytest.param(
            Op.EXTCALL,
            Op.PUSH1(1),
            COLD_ACCOUNT_ACCESS_GAS + ACCOUNT_CREATION_GAS + CALL_WITH_VALUE_GAS,
            WARM_ACCOUNT_ACCESS_GAS + ACCOUNT_CREATION_GAS + CALL_WITH_VALUE_GAS,
            True,
            id="EXTCALL_with_value_new_acc",
        ),
        pytest.param(
            Op.EXTDELEGATECALL,
            Op.NOOP,
            COLD_ACCOUNT_ACCESS_GAS,
            WARM_ACCOUNT_ACCESS_GAS,
            True,
            id="EXTDELEGATECALL_new_acc",
        ),
        pytest.param(
            Op.EXTSTATICCALL,
            Op.NOOP,
            COLD_ACCOUNT_ACCESS_GAS,
            WARM_ACCOUNT_ACCESS_GAS,
            True,
            id="EXTSTATICCALL_new_acc",
        ),
    ],
)
@pytest.mark.parametrize(
    "mem_expansion_bytes",
    [0, 1, 32, 33],
)
def test_ext_calls_gas(
    state_test: StateTestFiller,
    pre: Alloc,
    fork: Fork,
    state_env: Environment,
    opcode: Op,
    pre_setup: Op,
    cold_gas: int,
    warm_gas: int,
    new_account: bool,
    mem_expansion_bytes: int,
):
    """Tests variations of EXT*CALL gas, both warm and cold, without and with mem expansions."""
    address_target = (
        pre.fund_eoa(0) if new_account else pre.deploy_contract(Container.Code(Op.STOP))
    )
    cost_memory_bytes = fork.memory_expansion_gas_calculator()
    gas_test(
        state_test,
        state_env,
        pre,
        setup_code=pre_setup
        + Op.PUSH1(mem_expansion_bytes)
        + Op.PUSH0
        + Op.PUSH20(address_target),
        subject_code=opcode,
        tear_down_code=Op.STOP,
        cold_gas=cold_gas + cost_memory_bytes(new_bytes=mem_expansion_bytes),
        warm_gas=warm_gas + cost_memory_bytes(new_bytes=mem_expansion_bytes),
    )

Parametrized Test Cases

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

Test ID (Abbreviated) mem_expansion_bytes opcode pre_setup cold_gas warm_gas new_account
...fork_Osaka-state_test-mem_expansion_bytes_0-EXTCALL 0 EXTCALL PUSH0 2600 100 False
...fork_Osaka-state_test-mem_expansion_bytes_0-EXTCALL_with_value 0 EXTCALL 11600 9100 False
...fork_Osaka-state_test-mem_expansion_bytes_0-EXTDELEGATECALL 0 EXTDELEGATECALL JUMPDEST 2600 100 False
...fork_Osaka-state_test-mem_expansion_bytes_0-EXTSTATICCALL 0 EXTSTATICCALL JUMPDEST 2600 100 False
...fork_Osaka-state_test-mem_expansion_bytes_0-EXTCALL_new_acc 0 EXTCALL PUSH0 2600 100 True
...fork_Osaka-state_test-mem_expansion_bytes_0-EXTCALL_with_value_new_acc 0 EXTCALL 36600 34100 True
...fork_Osaka-state_test-mem_expansion_bytes_0-EXTDELEGATECALL_new_acc 0 EXTDELEGATECALL JUMPDEST 2600 100 True
...fork_Osaka-state_test-mem_expansion_bytes_0-EXTSTATICCALL_new_acc 0 EXTSTATICCALL JUMPDEST 2600 100 True
...fork_Osaka-state_test-mem_expansion_bytes_1-EXTCALL 1 EXTCALL PUSH0 2600 100 False
...fork_Osaka-state_test-mem_expansion_bytes_1-EXTCALL_with_value 1 EXTCALL 11600 9100 False
...fork_Osaka-state_test-mem_expansion_bytes_1-EXTDELEGATECALL 1 EXTDELEGATECALL JUMPDEST 2600 100 False
...fork_Osaka-state_test-mem_expansion_bytes_1-EXTSTATICCALL 1 EXTSTATICCALL JUMPDEST 2600 100 False
...fork_Osaka-state_test-mem_expansion_bytes_1-EXTCALL_new_acc 1 EXTCALL PUSH0 2600 100 True
...fork_Osaka-state_test-mem_expansion_bytes_1-EXTCALL_with_value_new_acc 1 EXTCALL 36600 34100 True
...fork_Osaka-state_test-mem_expansion_bytes_1-EXTDELEGATECALL_new_acc 1 EXTDELEGATECALL JUMPDEST 2600 100 True
...fork_Osaka-state_test-mem_expansion_bytes_1-EXTSTATICCALL_new_acc 1 EXTSTATICCALL JUMPDEST 2600 100 True
...fork_Osaka-state_test-mem_expansion_bytes_32-EXTCALL 32 EXTCALL PUSH0 2600 100 False
...fork_Osaka-state_test-mem_expansion_bytes_32-EXTCALL_with_value 32 EXTCALL 11600 9100 False
...fork_Osaka-state_test-mem_expansion_bytes_32-EXTDELEGATECALL 32 EXTDELEGATECALL JUMPDEST 2600 100 False
...fork_Osaka-state_test-mem_expansion_bytes_32-EXTSTATICCALL 32 EXTSTATICCALL JUMPDEST 2600 100 False
...fork_Osaka-state_test-mem_expansion_bytes_32-EXTCALL_new_acc 32 EXTCALL PUSH0 2600 100 True
...fork_Osaka-state_test-mem_expansion_bytes_32-EXTCALL_with_value_new_acc 32 EXTCALL 36600 34100 True
...fork_Osaka-state_test-mem_expansion_bytes_32-EXTDELEGATECALL_new_acc 32 EXTDELEGATECALL JUMPDEST 2600 100 True
...fork_Osaka-state_test-mem_expansion_bytes_32-EXTSTATICCALL_new_acc 32 EXTSTATICCALL JUMPDEST 2600 100 True
...fork_Osaka-state_test-mem_expansion_bytes_33-EXTCALL 33 EXTCALL PUSH0 2600 100 False
...fork_Osaka-state_test-mem_expansion_bytes_33-EXTCALL_with_value 33 EXTCALL 11600 9100 False
...fork_Osaka-state_test-mem_expansion_bytes_33-EXTDELEGATECALL 33 EXTDELEGATECALL JUMPDEST 2600 100 False
...fork_Osaka-state_test-mem_expansion_bytes_33-EXTSTATICCALL 33 EXTSTATICCALL JUMPDEST 2600 100 False
...fork_Osaka-state_test-mem_expansion_bytes_33-EXTCALL_new_acc 33 EXTCALL PUSH0 2600 100 True
...fork_Osaka-state_test-mem_expansion_bytes_33-EXTCALL_with_value_new_acc 33 EXTCALL 36600 34100 True
...fork_Osaka-state_test-mem_expansion_bytes_33-EXTDELEGATECALL_new_acc 33 EXTDELEGATECALL JUMPDEST 2600 100 True
...fork_Osaka-state_test-mem_expansion_bytes_33-EXTSTATICCALL_new_acc 33 EXTSTATICCALL JUMPDEST 2600 100 True
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_0-EXTCALL 0 EXTCALL PUSH0 2600 100 False
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_0-EXTCALL_with_value 0 EXTCALL 11600 9100 False
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_0-EXTDELEGATECALL 0 EXTDELEGATECALL JUMPDEST 2600 100 False
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_0-EXTSTATICCALL 0 EXTSTATICCALL JUMPDEST 2600 100 False
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_0-EXTCALL_new_acc 0 EXTCALL PUSH0 2600 100 True
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_0-EXTCALL_with_value_new_acc 0 EXTCALL 36600 34100 True
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_0-EXTDELEGATECALL_new_acc 0 EXTDELEGATECALL JUMPDEST 2600 100 True
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_0-EXTSTATICCALL_new_acc 0 EXTSTATICCALL JUMPDEST 2600 100 True
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_1-EXTCALL 1 EXTCALL PUSH0 2600 100 False
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_1-EXTCALL_with_value 1 EXTCALL 11600 9100 False
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_1-EXTDELEGATECALL 1 EXTDELEGATECALL JUMPDEST 2600 100 False
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_1-EXTSTATICCALL 1 EXTSTATICCALL JUMPDEST 2600 100 False
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_1-EXTCALL_new_acc 1 EXTCALL PUSH0 2600 100 True
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_1-EXTCALL_with_value_new_acc 1 EXTCALL 36600 34100 True
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_1-EXTDELEGATECALL_new_acc 1 EXTDELEGATECALL JUMPDEST 2600 100 True
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_1-EXTSTATICCALL_new_acc 1 EXTSTATICCALL JUMPDEST 2600 100 True
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_32-EXTCALL 32 EXTCALL PUSH0 2600 100 False
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_32-EXTCALL_with_value 32 EXTCALL 11600 9100 False
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_32-EXTDELEGATECALL 32 EXTDELEGATECALL JUMPDEST 2600 100 False
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_32-EXTSTATICCALL 32 EXTSTATICCALL JUMPDEST 2600 100 False
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_32-EXTCALL_new_acc 32 EXTCALL PUSH0 2600 100 True
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_32-EXTCALL_with_value_new_acc 32 EXTCALL 36600 34100 True
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_32-EXTDELEGATECALL_new_acc 32 EXTDELEGATECALL JUMPDEST 2600 100 True
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_32-EXTSTATICCALL_new_acc 32 EXTSTATICCALL JUMPDEST 2600 100 True
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_33-EXTCALL 33 EXTCALL PUSH0 2600 100 False
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_33-EXTCALL_with_value 33 EXTCALL 11600 9100 False
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_33-EXTDELEGATECALL 33 EXTDELEGATECALL JUMPDEST 2600 100 False
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_33-EXTSTATICCALL 33 EXTSTATICCALL JUMPDEST 2600 100 False
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_33-EXTCALL_new_acc 33 EXTCALL PUSH0 2600 100 True
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_33-EXTCALL_with_value_new_acc 33 EXTCALL 36600 34100 True
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_33-EXTDELEGATECALL_new_acc 33 EXTDELEGATECALL JUMPDEST 2600 100 True
...fork_Osaka-blockchain_test_from_state_test-mem_expansion_bytes_33-EXTSTATICCALL_new_acc 33 EXTSTATICCALL JUMPDEST 2600 100 True