Skip to content

test_worst_callvalue()

Documentation for tests/zkevm/test_worst_compute.py::test_worst_callvalue@64f949d0.

Generate fixtures for these test cases for Prague with:

fill -v tests/zkevm/test_worst_compute.py::test_worst_callvalue --fork Prague

Test running a block with as many CALLVALUE opcodes as possible.

The non_zero_value parameter controls whether opcode must return non-zero value. The from_origin parameter controls whether the call frame is the immediate from the transaction or a previous CALL.

Source code in tests/zkevm/test_worst_compute.py
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
@pytest.mark.valid_from("Cancun")
@pytest.mark.parametrize("non_zero_value", [True, False])
@pytest.mark.parametrize("from_origin", [True, False])
def test_worst_callvalue(
    state_test: StateTestFiller,
    pre: Alloc,
    fork: Fork,
    non_zero_value: bool,
    from_origin: bool,
):
    """
    Test running a block with as many CALLVALUE opcodes as possible.

    The `non_zero_value` parameter controls whether opcode must return non-zero value.
    The `from_origin` parameter controls whether the call frame is the immediate from the
    transaction or a previous CALL.
    """
    env = Environment()
    max_code_size = fork.max_code_size()

    code_prefix = Op.JUMPDEST
    iter_loop = Op.POP(Op.CALLVALUE)
    code_suffix = Op.PUSH0 + Op.JUMP
    code_iter_len = (max_code_size - len(code_prefix) - len(code_suffix)) // len(iter_loop)
    code = code_prefix + iter_loop * code_iter_len + code_suffix
    assert len(code) <= max_code_size
    code_address = pre.deploy_contract(code=bytes(code))

    tx_to = (
        code_address
        if from_origin
        else pre.deploy_contract(
            code=Op.CALL(address=code_address, value=1 if non_zero_value else 0), balance=10
        )
    )

    tx = Transaction(
        to=tx_to,
        gas_limit=env.gas_limit,
        value=1 if non_zero_value and from_origin else 0,
        sender=pre.fund_eoa(),
    )

    state_test(
        env=env,
        pre=pre,
        post={},
        tx=tx,
    )

Parametrized Test Cases

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

Test ID (Abbreviated) from_origin non_zero_value
...fork_Cancun-state_test-from_origin_True-non_zero_value_True True True
...fork_Cancun-state_test-from_origin_True-non_zero_value_False True False
...fork_Cancun-state_test-from_origin_False-non_zero_value_True False True
...fork_Cancun-state_test-from_origin_False-non_zero_value_False False False
...fork_Cancun-blockchain_test_from_state_test-from_origin_True-non_zero_value_True True True
...fork_Cancun-blockchain_test_from_state_test-from_origin_True-non_zero_value_False True False
...fork_Cancun-blockchain_test_from_state_test-from_origin_False-non_zero_value_True False True
...fork_Cancun-blockchain_test_from_state_test-from_origin_False-non_zero_value_False False False
...fork_Prague-state_test-from_origin_True-non_zero_value_True True True
...fork_Prague-state_test-from_origin_True-non_zero_value_False True False
...fork_Prague-state_test-from_origin_False-non_zero_value_True False True
...fork_Prague-state_test-from_origin_False-non_zero_value_False False False
...fork_Prague-blockchain_test_from_state_test-from_origin_True-non_zero_value_True True True
...fork_Prague-blockchain_test_from_state_test-from_origin_True-non_zero_value_False True False
...fork_Prague-blockchain_test_from_state_test-from_origin_False-non_zero_value_True False True
...fork_Prague-blockchain_test_from_state_test-from_origin_False-non_zero_value_False False False
...fork_Osaka-state_test-from_origin_True-non_zero_value_True True True
...fork_Osaka-state_test-from_origin_True-non_zero_value_False True False
...fork_Osaka-state_test-from_origin_False-non_zero_value_True False True
...fork_Osaka-state_test-from_origin_False-non_zero_value_False False False
...fork_Osaka-blockchain_test_from_state_test-from_origin_True-non_zero_value_True True True
...fork_Osaka-blockchain_test_from_state_test-from_origin_True-non_zero_value_False True False
...fork_Osaka-blockchain_test_from_state_test-from_origin_False-non_zero_value_True False True
...fork_Osaka-blockchain_test_from_state_test-from_origin_False-non_zero_value_False False False