Skip to content

test_worst_dup()

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

Generate fixtures for these test cases for Osaka with:

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

Test running a block with as many DUP as possible.

Source code in tests/benchmark/test_worst_compute.py
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
@pytest.mark.parametrize(
    "opcode",
    [
        pytest.param(Op.DUP1),
        pytest.param(Op.DUP2),
        pytest.param(Op.DUP3),
        pytest.param(Op.DUP4),
        pytest.param(Op.DUP5),
        pytest.param(Op.DUP6),
        pytest.param(Op.DUP7),
        pytest.param(Op.DUP8),
        pytest.param(Op.DUP9),
        pytest.param(Op.DUP10),
        pytest.param(Op.DUP11),
        pytest.param(Op.DUP12),
        pytest.param(Op.DUP13),
        pytest.param(Op.DUP14),
        pytest.param(Op.DUP15),
        pytest.param(Op.DUP16),
    ],
)
def test_worst_dup(
    state_test: StateTestFiller,
    pre: Alloc,
    fork: Fork,
    opcode: Op,
    gas_benchmark_value: int,
):
    """Test running a block with as many DUP as possible."""
    max_stack_height = fork.max_stack_height()

    min_stack_height = opcode.min_stack_height
    code_prefix = Op.PUSH0 * min_stack_height
    opcode_sequence = opcode * (max_stack_height - min_stack_height)
    target_contract_address = pre.deploy_contract(code=code_prefix + 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_DUP1 DUP1
...fork_Prague-state_test-opcode_DUP2 DUP2
...fork_Prague-state_test-opcode_DUP3 DUP3
...fork_Prague-state_test-opcode_DUP4 DUP4
...fork_Prague-state_test-opcode_DUP5 DUP5
...fork_Prague-state_test-opcode_DUP6 DUP6
...fork_Prague-state_test-opcode_DUP7 DUP7
...fork_Prague-state_test-opcode_DUP8 DUP8
...fork_Prague-state_test-opcode_DUP9 DUP9
...fork_Prague-state_test-opcode_DUP10 DUP10
...fork_Prague-state_test-opcode_DUP11 DUP11
...fork_Prague-state_test-opcode_DUP12 DUP12
...fork_Prague-state_test-opcode_DUP13 DUP13
...fork_Prague-state_test-opcode_DUP14 DUP14
...fork_Prague-state_test-opcode_DUP15 DUP15
...fork_Prague-state_test-opcode_DUP16 DUP16
...fork_Prague-blockchain_test_from_state_test-opcode_DUP1 DUP1
...fork_Prague-blockchain_test_from_state_test-opcode_DUP2 DUP2
...fork_Prague-blockchain_test_from_state_test-opcode_DUP3 DUP3
...fork_Prague-blockchain_test_from_state_test-opcode_DUP4 DUP4
...fork_Prague-blockchain_test_from_state_test-opcode_DUP5 DUP5
...fork_Prague-blockchain_test_from_state_test-opcode_DUP6 DUP6
...fork_Prague-blockchain_test_from_state_test-opcode_DUP7 DUP7
...fork_Prague-blockchain_test_from_state_test-opcode_DUP8 DUP8
...fork_Prague-blockchain_test_from_state_test-opcode_DUP9 DUP9
...fork_Prague-blockchain_test_from_state_test-opcode_DUP10 DUP10
...fork_Prague-blockchain_test_from_state_test-opcode_DUP11 DUP11
...fork_Prague-blockchain_test_from_state_test-opcode_DUP12 DUP12
...fork_Prague-blockchain_test_from_state_test-opcode_DUP13 DUP13
...fork_Prague-blockchain_test_from_state_test-opcode_DUP14 DUP14
...fork_Prague-blockchain_test_from_state_test-opcode_DUP15 DUP15
...fork_Prague-blockchain_test_from_state_test-opcode_DUP16 DUP16
...fork_Osaka-state_test-opcode_DUP1 DUP1
...fork_Osaka-state_test-opcode_DUP2 DUP2
...fork_Osaka-state_test-opcode_DUP3 DUP3
...fork_Osaka-state_test-opcode_DUP4 DUP4
...fork_Osaka-state_test-opcode_DUP5 DUP5
...fork_Osaka-state_test-opcode_DUP6 DUP6
...fork_Osaka-state_test-opcode_DUP7 DUP7
...fork_Osaka-state_test-opcode_DUP8 DUP8
...fork_Osaka-state_test-opcode_DUP9 DUP9
...fork_Osaka-state_test-opcode_DUP10 DUP10
...fork_Osaka-state_test-opcode_DUP11 DUP11
...fork_Osaka-state_test-opcode_DUP12 DUP12
...fork_Osaka-state_test-opcode_DUP13 DUP13
...fork_Osaka-state_test-opcode_DUP14 DUP14
...fork_Osaka-state_test-opcode_DUP15 DUP15
...fork_Osaka-state_test-opcode_DUP16 DUP16
...fork_Osaka-blockchain_test_from_state_test-opcode_DUP1 DUP1
...fork_Osaka-blockchain_test_from_state_test-opcode_DUP2 DUP2
...fork_Osaka-blockchain_test_from_state_test-opcode_DUP3 DUP3
...fork_Osaka-blockchain_test_from_state_test-opcode_DUP4 DUP4
...fork_Osaka-blockchain_test_from_state_test-opcode_DUP5 DUP5
...fork_Osaka-blockchain_test_from_state_test-opcode_DUP6 DUP6
...fork_Osaka-blockchain_test_from_state_test-opcode_DUP7 DUP7
...fork_Osaka-blockchain_test_from_state_test-opcode_DUP8 DUP8
...fork_Osaka-blockchain_test_from_state_test-opcode_DUP9 DUP9
...fork_Osaka-blockchain_test_from_state_test-opcode_DUP10 DUP10
...fork_Osaka-blockchain_test_from_state_test-opcode_DUP11 DUP11
...fork_Osaka-blockchain_test_from_state_test-opcode_DUP12 DUP12
...fork_Osaka-blockchain_test_from_state_test-opcode_DUP13 DUP13
...fork_Osaka-blockchain_test_from_state_test-opcode_DUP14 DUP14
...fork_Osaka-blockchain_test_from_state_test-opcode_DUP15 DUP15
...fork_Osaka-blockchain_test_from_state_test-opcode_DUP16 DUP16