Skip to content

test_worst_push()

Documentation for tests/benchmark/test_worst_compute.py::test_worst_push@v5.1.0.

Generate fixtures for these test cases for Osaka with:

fill -v tests/benchmark/test_worst_compute.py::test_worst_push -m benchmark

Test running a block with as many PUSH as possible.

Source code in tests/benchmark/test_worst_compute.py
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
@pytest.mark.parametrize(
    "opcode",
    [
        pytest.param(Op.PUSH0),
        pytest.param(Op.PUSH1),
        pytest.param(Op.PUSH2),
        pytest.param(Op.PUSH3),
        pytest.param(Op.PUSH4),
        pytest.param(Op.PUSH5),
        pytest.param(Op.PUSH6),
        pytest.param(Op.PUSH7),
        pytest.param(Op.PUSH8),
        pytest.param(Op.PUSH9),
        pytest.param(Op.PUSH10),
        pytest.param(Op.PUSH11),
        pytest.param(Op.PUSH12),
        pytest.param(Op.PUSH13),
        pytest.param(Op.PUSH14),
        pytest.param(Op.PUSH15),
        pytest.param(Op.PUSH16),
        pytest.param(Op.PUSH17),
        pytest.param(Op.PUSH18),
        pytest.param(Op.PUSH19),
        pytest.param(Op.PUSH20),
        pytest.param(Op.PUSH21),
        pytest.param(Op.PUSH22),
        pytest.param(Op.PUSH23),
        pytest.param(Op.PUSH24),
        pytest.param(Op.PUSH25),
        pytest.param(Op.PUSH26),
        pytest.param(Op.PUSH27),
        pytest.param(Op.PUSH28),
        pytest.param(Op.PUSH29),
        pytest.param(Op.PUSH30),
        pytest.param(Op.PUSH31),
        pytest.param(Op.PUSH32),
    ],
)
def test_worst_push(
    state_test: StateTestFiller,
    pre: Alloc,
    fork: Fork,
    opcode: Op,
    gas_benchmark_value: int,
):
    """Test running a block with as many PUSH as possible."""
    op = opcode[1] if opcode.has_data_portion() else opcode
    opcode_sequence = op * fork.max_stack_height()
    target_contract_address = pre.deploy_contract(code=opcode_sequence)

    calldata = Bytecode()
    attack_block = Op.POP(Op.STATICCALL(Op.GAS, target_contract_address, 0, 0, 0, 0))

    code = code_loop_precompile_call(calldata, attack_block, fork)
    code_address = pre.deploy_contract(code=code)

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

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

Parametrized Test Cases

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

Test ID (Abbreviated) opcode
...fork_Prague-state_test-opcode_PUSH0 PUSH0
...fork_Prague-state_test-opcode_PUSH1 PUSH1
...fork_Prague-state_test-opcode_PUSH2 PUSH2
...fork_Prague-state_test-opcode_PUSH3 PUSH3
...fork_Prague-state_test-opcode_PUSH4 PUSH4
...fork_Prague-state_test-opcode_PUSH5 PUSH5
...fork_Prague-state_test-opcode_PUSH6 PUSH6
...fork_Prague-state_test-opcode_PUSH7 PUSH7
...fork_Prague-state_test-opcode_PUSH8 PUSH8
...fork_Prague-state_test-opcode_PUSH9 PUSH9
...fork_Prague-state_test-opcode_PUSH10 PUSH10
...fork_Prague-state_test-opcode_PUSH11 PUSH11
...fork_Prague-state_test-opcode_PUSH12 PUSH12
...fork_Prague-state_test-opcode_PUSH13 PUSH13
...fork_Prague-state_test-opcode_PUSH14 PUSH14
...fork_Prague-state_test-opcode_PUSH15 PUSH15
...fork_Prague-state_test-opcode_PUSH16 PUSH16
...fork_Prague-state_test-opcode_PUSH17 PUSH17
...fork_Prague-state_test-opcode_PUSH18 PUSH18
...fork_Prague-state_test-opcode_PUSH19 PUSH19
...fork_Prague-state_test-opcode_PUSH20 PUSH20
...fork_Prague-state_test-opcode_PUSH21 PUSH21
...fork_Prague-state_test-opcode_PUSH22 PUSH22
...fork_Prague-state_test-opcode_PUSH23 PUSH23
...fork_Prague-state_test-opcode_PUSH24 PUSH24
...fork_Prague-state_test-opcode_PUSH25 PUSH25
...fork_Prague-state_test-opcode_PUSH26 PUSH26
...fork_Prague-state_test-opcode_PUSH27 PUSH27
...fork_Prague-state_test-opcode_PUSH28 PUSH28
...fork_Prague-state_test-opcode_PUSH29 PUSH29
...fork_Prague-state_test-opcode_PUSH30 PUSH30
...fork_Prague-state_test-opcode_PUSH31 PUSH31
...fork_Prague-state_test-opcode_PUSH32 PUSH32
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH0 PUSH0
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH1 PUSH1
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH2 PUSH2
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH3 PUSH3
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH4 PUSH4
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH5 PUSH5
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH6 PUSH6
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH7 PUSH7
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH8 PUSH8
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH9 PUSH9
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH10 PUSH10
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH11 PUSH11
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH12 PUSH12
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH13 PUSH13
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH14 PUSH14
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH15 PUSH15
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH16 PUSH16
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH17 PUSH17
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH18 PUSH18
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH19 PUSH19
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH20 PUSH20
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH21 PUSH21
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH22 PUSH22
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH23 PUSH23
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH24 PUSH24
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH25 PUSH25
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH26 PUSH26
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH27 PUSH27
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH28 PUSH28
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH29 PUSH29
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH30 PUSH30
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH31 PUSH31
...fork_Prague-blockchain_test_from_state_test-opcode_PUSH32 PUSH32
...fork_Osaka-state_test-opcode_PUSH0 PUSH0
...fork_Osaka-state_test-opcode_PUSH1 PUSH1
...fork_Osaka-state_test-opcode_PUSH2 PUSH2
...fork_Osaka-state_test-opcode_PUSH3 PUSH3
...fork_Osaka-state_test-opcode_PUSH4 PUSH4
...fork_Osaka-state_test-opcode_PUSH5 PUSH5
...fork_Osaka-state_test-opcode_PUSH6 PUSH6
...fork_Osaka-state_test-opcode_PUSH7 PUSH7
...fork_Osaka-state_test-opcode_PUSH8 PUSH8
...fork_Osaka-state_test-opcode_PUSH9 PUSH9
...fork_Osaka-state_test-opcode_PUSH10 PUSH10
...fork_Osaka-state_test-opcode_PUSH11 PUSH11
...fork_Osaka-state_test-opcode_PUSH12 PUSH12
...fork_Osaka-state_test-opcode_PUSH13 PUSH13
...fork_Osaka-state_test-opcode_PUSH14 PUSH14
...fork_Osaka-state_test-opcode_PUSH15 PUSH15
...fork_Osaka-state_test-opcode_PUSH16 PUSH16
...fork_Osaka-state_test-opcode_PUSH17 PUSH17
...fork_Osaka-state_test-opcode_PUSH18 PUSH18
...fork_Osaka-state_test-opcode_PUSH19 PUSH19
...fork_Osaka-state_test-opcode_PUSH20 PUSH20
...fork_Osaka-state_test-opcode_PUSH21 PUSH21
...fork_Osaka-state_test-opcode_PUSH22 PUSH22
...fork_Osaka-state_test-opcode_PUSH23 PUSH23
...fork_Osaka-state_test-opcode_PUSH24 PUSH24
...fork_Osaka-state_test-opcode_PUSH25 PUSH25
...fork_Osaka-state_test-opcode_PUSH26 PUSH26
...fork_Osaka-state_test-opcode_PUSH27 PUSH27
...fork_Osaka-state_test-opcode_PUSH28 PUSH28
...fork_Osaka-state_test-opcode_PUSH29 PUSH29
...fork_Osaka-state_test-opcode_PUSH30 PUSH30
...fork_Osaka-state_test-opcode_PUSH31 PUSH31
...fork_Osaka-state_test-opcode_PUSH32 PUSH32
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH0 PUSH0
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH1 PUSH1
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH2 PUSH2
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH3 PUSH3
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH4 PUSH4
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH5 PUSH5
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH6 PUSH6
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH7 PUSH7
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH8 PUSH8
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH9 PUSH9
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH10 PUSH10
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH11 PUSH11
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH12 PUSH12
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH13 PUSH13
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH14 PUSH14
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH15 PUSH15
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH16 PUSH16
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH17 PUSH17
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH18 PUSH18
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH19 PUSH19
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH20 PUSH20
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH21 PUSH21
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH22 PUSH22
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH23 PUSH23
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH24 PUSH24
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH25 PUSH25
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH26 PUSH26
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH27 PUSH27
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH28 PUSH28
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH29 PUSH29
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH30 PUSH30
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH31 PUSH31
...fork_Osaka-blockchain_test_from_state_test-opcode_PUSH32 PUSH32