Skip to content

test_worst_log_opcodes()

Documentation for tests/benchmark/test_worst_opcode.py::test_worst_log_opcodes@88e9fb8f.

Generate fixtures for these test cases for Osaka with:

fill -v tests/benchmark/test_worst_opcode.py::test_worst_log_opcodes -m benchmark

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

Source code in tests/benchmark/test_worst_opcode.py
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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
@pytest.mark.parametrize(
    "opcode",
    [
        pytest.param(Op.LOG0, id="log0"),
        pytest.param(Op.LOG1, id="log1"),
        pytest.param(Op.LOG2, id="log2"),
        pytest.param(Op.LOG3, id="log3"),
        pytest.param(Op.LOG4, id="log4"),
    ],
)
@pytest.mark.parametrize(
    "size,non_zero_data",
    [
        pytest.param(0, False, id="0_bytes_data"),
        pytest.param(1024 * 1024, False, id="1_MiB_zeros_data"),  # 1 MiB
        pytest.param(1024 * 1024, True, id="1_MiB_non_zero_data"),  # 1 MiB
    ],
)
@pytest.mark.parametrize(
    "zeros_topic", [pytest.param(True, id="zeros_topic"), pytest.param(False, id="non_zero_topic")]
)
@pytest.mark.parametrize("fixed_offset", [True, False])
def test_worst_log_opcodes(
    benchmark_test: BenchmarkTestFiller,
    opcode: Opcode,
    zeros_topic: bool,
    size: int,
    fixed_offset: bool,
    non_zero_data: bool,
) -> None:
    """Test running a block with as many LOG opcodes as possible."""
    setup = Bytecode()

    # For non-zero data, load  into memory.
    if non_zero_data:
        setup += Op.CODECOPY(dest_offset=0, offset=0, size=Op.CODESIZE)

    # Push the size value onto the stack and access it using the DUP opcode.
    setup += Op.PUSH3(size)

    # For non-zeros topic, push a non-zero value for topic.
    setup += Op.PUSH0 if zeros_topic else Op.PUSH32(2**256 - 1)

    topic_count = len(opcode.kwargs or []) - 2
    offset = Op.PUSH0 if fixed_offset else Op.MOD(Op.GAS, 7)

    # Calculate the appropriate DUP opcode based on topic count
    # 0 topics -> DUP1, 1 topic -> DUP2, N topics -> DUP(N+1)
    size_op = getattr(Op, f"DUP{topic_count + 2}")

    attack_block = Op.DUP1 * topic_count + size_op + offset + opcode

    benchmark_test(
        code_generator=JumpLoopGenerator(setup=setup, attack_block=attack_block),
    )

Parametrized Test Cases

This test case is only parametrized by fork.

Test ID (Abbreviated) fixed_offset zeros_topic size non_zero_data opcode
...fork_Prague-blockchain_test-fixed_offset_True-zeros_topic-0_bytes_data-log0 True True 0 False LOG0
...fork_Prague-blockchain_test-fixed_offset_True-zeros_topic-0_bytes_data-log1 True True 0 False LOG1
...fork_Prague-blockchain_test-fixed_offset_True-zeros_topic-0_bytes_data-log2 True True 0 False LOG2
...fork_Prague-blockchain_test-fixed_offset_True-zeros_topic-0_bytes_data-log3 True True 0 False LOG3
...fork_Prague-blockchain_test-fixed_offset_True-zeros_topic-0_bytes_data-log4 True True 0 False LOG4
...fork_Prague-blockchain_test-fixed_offset_True-zeros_topic-1_MiB_zeros_data-log0 True True 1048576 False LOG0
...fork_Prague-blockchain_test-fixed_offset_True-zeros_topic-1_MiB_zeros_data-log1 True True 1048576 False LOG1
...fork_Prague-blockchain_test-fixed_offset_True-zeros_topic-1_MiB_zeros_data-log2 True True 1048576 False LOG2
...fork_Prague-blockchain_test-fixed_offset_True-zeros_topic-1_MiB_zeros_data-log3 True True 1048576 False LOG3
...fork_Prague-blockchain_test-fixed_offset_True-zeros_topic-1_MiB_zeros_data-log4 True True 1048576 False LOG4
...fork_Prague-blockchain_test-fixed_offset_True-zeros_topic-1_MiB_non_zero_data-log0 True True 1048576 True LOG0
...fork_Prague-blockchain_test-fixed_offset_True-zeros_topic-1_MiB_non_zero_data-log1 True True 1048576 True LOG1
...fork_Prague-blockchain_test-fixed_offset_True-zeros_topic-1_MiB_non_zero_data-log2 True True 1048576 True LOG2
...fork_Prague-blockchain_test-fixed_offset_True-zeros_topic-1_MiB_non_zero_data-log3 True True 1048576 True LOG3
...fork_Prague-blockchain_test-fixed_offset_True-zeros_topic-1_MiB_non_zero_data-log4 True True 1048576 True LOG4
...fork_Prague-blockchain_test-fixed_offset_True-non_zero_topic-0_bytes_data-log0 True False 0 False LOG0
...fork_Prague-blockchain_test-fixed_offset_True-non_zero_topic-0_bytes_data-log1 True False 0 False LOG1
...fork_Prague-blockchain_test-fixed_offset_True-non_zero_topic-0_bytes_data-log2 True False 0 False LOG2
...fork_Prague-blockchain_test-fixed_offset_True-non_zero_topic-0_bytes_data-log3 True False 0 False LOG3
...fork_Prague-blockchain_test-fixed_offset_True-non_zero_topic-0_bytes_data-log4 True False 0 False LOG4
...fork_Prague-blockchain_test-fixed_offset_True-non_zero_topic-1_MiB_zeros_data-log0 True False 1048576 False LOG0
...fork_Prague-blockchain_test-fixed_offset_True-non_zero_topic-1_MiB_zeros_data-log1 True False 1048576 False LOG1
...fork_Prague-blockchain_test-fixed_offset_True-non_zero_topic-1_MiB_zeros_data-log2 True False 1048576 False LOG2
...fork_Prague-blockchain_test-fixed_offset_True-non_zero_topic-1_MiB_zeros_data-log3 True False 1048576 False LOG3
...fork_Prague-blockchain_test-fixed_offset_True-non_zero_topic-1_MiB_zeros_data-log4 True False 1048576 False LOG4
...fork_Prague-blockchain_test-fixed_offset_True-non_zero_topic-1_MiB_non_zero_data-log0 True False 1048576 True LOG0
...fork_Prague-blockchain_test-fixed_offset_True-non_zero_topic-1_MiB_non_zero_data-log1 True False 1048576 True LOG1
...fork_Prague-blockchain_test-fixed_offset_True-non_zero_topic-1_MiB_non_zero_data-log2 True False 1048576 True LOG2
...fork_Prague-blockchain_test-fixed_offset_True-non_zero_topic-1_MiB_non_zero_data-log3 True False 1048576 True LOG3
...fork_Prague-blockchain_test-fixed_offset_True-non_zero_topic-1_MiB_non_zero_data-log4 True False 1048576 True LOG4
...fork_Prague-blockchain_test-fixed_offset_False-zeros_topic-0_bytes_data-log0 False True 0 False LOG0
...fork_Prague-blockchain_test-fixed_offset_False-zeros_topic-0_bytes_data-log1 False True 0 False LOG1
...fork_Prague-blockchain_test-fixed_offset_False-zeros_topic-0_bytes_data-log2 False True 0 False LOG2
...fork_Prague-blockchain_test-fixed_offset_False-zeros_topic-0_bytes_data-log3 False True 0 False LOG3
...fork_Prague-blockchain_test-fixed_offset_False-zeros_topic-0_bytes_data-log4 False True 0 False LOG4
...fork_Prague-blockchain_test-fixed_offset_False-zeros_topic-1_MiB_zeros_data-log0 False True 1048576 False LOG0
...fork_Prague-blockchain_test-fixed_offset_False-zeros_topic-1_MiB_zeros_data-log1 False True 1048576 False LOG1
...fork_Prague-blockchain_test-fixed_offset_False-zeros_topic-1_MiB_zeros_data-log2 False True 1048576 False LOG2
...fork_Prague-blockchain_test-fixed_offset_False-zeros_topic-1_MiB_zeros_data-log3 False True 1048576 False LOG3
...fork_Prague-blockchain_test-fixed_offset_False-zeros_topic-1_MiB_zeros_data-log4 False True 1048576 False LOG4
...fork_Prague-blockchain_test-fixed_offset_False-zeros_topic-1_MiB_non_zero_data-log0 False True 1048576 True LOG0
...fork_Prague-blockchain_test-fixed_offset_False-zeros_topic-1_MiB_non_zero_data-log1 False True 1048576 True LOG1
...fork_Prague-blockchain_test-fixed_offset_False-zeros_topic-1_MiB_non_zero_data-log2 False True 1048576 True LOG2
...fork_Prague-blockchain_test-fixed_offset_False-zeros_topic-1_MiB_non_zero_data-log3 False True 1048576 True LOG3
...fork_Prague-blockchain_test-fixed_offset_False-zeros_topic-1_MiB_non_zero_data-log4 False True 1048576 True LOG4
...fork_Prague-blockchain_test-fixed_offset_False-non_zero_topic-0_bytes_data-log0 False False 0 False LOG0
...fork_Prague-blockchain_test-fixed_offset_False-non_zero_topic-0_bytes_data-log1 False False 0 False LOG1
...fork_Prague-blockchain_test-fixed_offset_False-non_zero_topic-0_bytes_data-log2 False False 0 False LOG2
...fork_Prague-blockchain_test-fixed_offset_False-non_zero_topic-0_bytes_data-log3 False False 0 False LOG3
...fork_Prague-blockchain_test-fixed_offset_False-non_zero_topic-0_bytes_data-log4 False False 0 False LOG4
...fork_Prague-blockchain_test-fixed_offset_False-non_zero_topic-1_MiB_zeros_data-log0 False False 1048576 False LOG0
...fork_Prague-blockchain_test-fixed_offset_False-non_zero_topic-1_MiB_zeros_data-log1 False False 1048576 False LOG1
...fork_Prague-blockchain_test-fixed_offset_False-non_zero_topic-1_MiB_zeros_data-log2 False False 1048576 False LOG2
...fork_Prague-blockchain_test-fixed_offset_False-non_zero_topic-1_MiB_zeros_data-log3 False False 1048576 False LOG3
...fork_Prague-blockchain_test-fixed_offset_False-non_zero_topic-1_MiB_zeros_data-log4 False False 1048576 False LOG4
...fork_Prague-blockchain_test-fixed_offset_False-non_zero_topic-1_MiB_non_zero_data-log0 False False 1048576 True LOG0
...fork_Prague-blockchain_test-fixed_offset_False-non_zero_topic-1_MiB_non_zero_data-log1 False False 1048576 True LOG1
...fork_Prague-blockchain_test-fixed_offset_False-non_zero_topic-1_MiB_non_zero_data-log2 False False 1048576 True LOG2
...fork_Prague-blockchain_test-fixed_offset_False-non_zero_topic-1_MiB_non_zero_data-log3 False False 1048576 True LOG3
...fork_Prague-blockchain_test-fixed_offset_False-non_zero_topic-1_MiB_non_zero_data-log4 False False 1048576 True LOG4
...fork_Osaka-blockchain_test-fixed_offset_True-zeros_topic-0_bytes_data-log0 True True 0 False LOG0
...fork_Osaka-blockchain_test-fixed_offset_True-zeros_topic-0_bytes_data-log1 True True 0 False LOG1
...fork_Osaka-blockchain_test-fixed_offset_True-zeros_topic-0_bytes_data-log2 True True 0 False LOG2
...fork_Osaka-blockchain_test-fixed_offset_True-zeros_topic-0_bytes_data-log3 True True 0 False LOG3
...fork_Osaka-blockchain_test-fixed_offset_True-zeros_topic-0_bytes_data-log4 True True 0 False LOG4
...fork_Osaka-blockchain_test-fixed_offset_True-zeros_topic-1_MiB_zeros_data-log0 True True 1048576 False LOG0
...fork_Osaka-blockchain_test-fixed_offset_True-zeros_topic-1_MiB_zeros_data-log1 True True 1048576 False LOG1
...fork_Osaka-blockchain_test-fixed_offset_True-zeros_topic-1_MiB_zeros_data-log2 True True 1048576 False LOG2
...fork_Osaka-blockchain_test-fixed_offset_True-zeros_topic-1_MiB_zeros_data-log3 True True 1048576 False LOG3
...fork_Osaka-blockchain_test-fixed_offset_True-zeros_topic-1_MiB_zeros_data-log4 True True 1048576 False LOG4
...fork_Osaka-blockchain_test-fixed_offset_True-zeros_topic-1_MiB_non_zero_data-log0 True True 1048576 True LOG0
...fork_Osaka-blockchain_test-fixed_offset_True-zeros_topic-1_MiB_non_zero_data-log1 True True 1048576 True LOG1
...fork_Osaka-blockchain_test-fixed_offset_True-zeros_topic-1_MiB_non_zero_data-log2 True True 1048576 True LOG2
...fork_Osaka-blockchain_test-fixed_offset_True-zeros_topic-1_MiB_non_zero_data-log3 True True 1048576 True LOG3
...fork_Osaka-blockchain_test-fixed_offset_True-zeros_topic-1_MiB_non_zero_data-log4 True True 1048576 True LOG4
...fork_Osaka-blockchain_test-fixed_offset_True-non_zero_topic-0_bytes_data-log0 True False 0 False LOG0
...fork_Osaka-blockchain_test-fixed_offset_True-non_zero_topic-0_bytes_data-log1 True False 0 False LOG1
...fork_Osaka-blockchain_test-fixed_offset_True-non_zero_topic-0_bytes_data-log2 True False 0 False LOG2
...fork_Osaka-blockchain_test-fixed_offset_True-non_zero_topic-0_bytes_data-log3 True False 0 False LOG3
...fork_Osaka-blockchain_test-fixed_offset_True-non_zero_topic-0_bytes_data-log4 True False 0 False LOG4
...fork_Osaka-blockchain_test-fixed_offset_True-non_zero_topic-1_MiB_zeros_data-log0 True False 1048576 False LOG0
...fork_Osaka-blockchain_test-fixed_offset_True-non_zero_topic-1_MiB_zeros_data-log1 True False 1048576 False LOG1
...fork_Osaka-blockchain_test-fixed_offset_True-non_zero_topic-1_MiB_zeros_data-log2 True False 1048576 False LOG2
...fork_Osaka-blockchain_test-fixed_offset_True-non_zero_topic-1_MiB_zeros_data-log3 True False 1048576 False LOG3
...fork_Osaka-blockchain_test-fixed_offset_True-non_zero_topic-1_MiB_zeros_data-log4 True False 1048576 False LOG4
...fork_Osaka-blockchain_test-fixed_offset_True-non_zero_topic-1_MiB_non_zero_data-log0 True False 1048576 True LOG0
...fork_Osaka-blockchain_test-fixed_offset_True-non_zero_topic-1_MiB_non_zero_data-log1 True False 1048576 True LOG1
...fork_Osaka-blockchain_test-fixed_offset_True-non_zero_topic-1_MiB_non_zero_data-log2 True False 1048576 True LOG2
...fork_Osaka-blockchain_test-fixed_offset_True-non_zero_topic-1_MiB_non_zero_data-log3 True False 1048576 True LOG3
...fork_Osaka-blockchain_test-fixed_offset_True-non_zero_topic-1_MiB_non_zero_data-log4 True False 1048576 True LOG4
...fork_Osaka-blockchain_test-fixed_offset_False-zeros_topic-0_bytes_data-log0 False True 0 False LOG0
...fork_Osaka-blockchain_test-fixed_offset_False-zeros_topic-0_bytes_data-log1 False True 0 False LOG1
...fork_Osaka-blockchain_test-fixed_offset_False-zeros_topic-0_bytes_data-log2 False True 0 False LOG2
...fork_Osaka-blockchain_test-fixed_offset_False-zeros_topic-0_bytes_data-log3 False True 0 False LOG3
...fork_Osaka-blockchain_test-fixed_offset_False-zeros_topic-0_bytes_data-log4 False True 0 False LOG4
...fork_Osaka-blockchain_test-fixed_offset_False-zeros_topic-1_MiB_zeros_data-log0 False True 1048576 False LOG0
...fork_Osaka-blockchain_test-fixed_offset_False-zeros_topic-1_MiB_zeros_data-log1 False True 1048576 False LOG1
...fork_Osaka-blockchain_test-fixed_offset_False-zeros_topic-1_MiB_zeros_data-log2 False True 1048576 False LOG2
...fork_Osaka-blockchain_test-fixed_offset_False-zeros_topic-1_MiB_zeros_data-log3 False True 1048576 False LOG3
...fork_Osaka-blockchain_test-fixed_offset_False-zeros_topic-1_MiB_zeros_data-log4 False True 1048576 False LOG4
...fork_Osaka-blockchain_test-fixed_offset_False-zeros_topic-1_MiB_non_zero_data-log0 False True 1048576 True LOG0
...fork_Osaka-blockchain_test-fixed_offset_False-zeros_topic-1_MiB_non_zero_data-log1 False True 1048576 True LOG1
...fork_Osaka-blockchain_test-fixed_offset_False-zeros_topic-1_MiB_non_zero_data-log2 False True 1048576 True LOG2
...fork_Osaka-blockchain_test-fixed_offset_False-zeros_topic-1_MiB_non_zero_data-log3 False True 1048576 True LOG3
...fork_Osaka-blockchain_test-fixed_offset_False-zeros_topic-1_MiB_non_zero_data-log4 False True 1048576 True LOG4
...fork_Osaka-blockchain_test-fixed_offset_False-non_zero_topic-0_bytes_data-log0 False False 0 False LOG0
...fork_Osaka-blockchain_test-fixed_offset_False-non_zero_topic-0_bytes_data-log1 False False 0 False LOG1
...fork_Osaka-blockchain_test-fixed_offset_False-non_zero_topic-0_bytes_data-log2 False False 0 False LOG2
...fork_Osaka-blockchain_test-fixed_offset_False-non_zero_topic-0_bytes_data-log3 False False 0 False LOG3
...fork_Osaka-blockchain_test-fixed_offset_False-non_zero_topic-0_bytes_data-log4 False False 0 False LOG4
...fork_Osaka-blockchain_test-fixed_offset_False-non_zero_topic-1_MiB_zeros_data-log0 False False 1048576 False LOG0
...fork_Osaka-blockchain_test-fixed_offset_False-non_zero_topic-1_MiB_zeros_data-log1 False False 1048576 False LOG1
...fork_Osaka-blockchain_test-fixed_offset_False-non_zero_topic-1_MiB_zeros_data-log2 False False 1048576 False LOG2
...fork_Osaka-blockchain_test-fixed_offset_False-non_zero_topic-1_MiB_zeros_data-log3 False False 1048576 False LOG3
...fork_Osaka-blockchain_test-fixed_offset_False-non_zero_topic-1_MiB_zeros_data-log4 False False 1048576 False LOG4
...fork_Osaka-blockchain_test-fixed_offset_False-non_zero_topic-1_MiB_non_zero_data-log0 False False 1048576 True LOG0
...fork_Osaka-blockchain_test-fixed_offset_False-non_zero_topic-1_MiB_non_zero_data-log1 False False 1048576 True LOG1
...fork_Osaka-blockchain_test-fixed_offset_False-non_zero_topic-1_MiB_non_zero_data-log2 False False 1048576 True LOG2
...fork_Osaka-blockchain_test-fixed_offset_False-non_zero_topic-1_MiB_non_zero_data-log3 False False 1048576 True LOG3
...fork_Osaka-blockchain_test-fixed_offset_False-non_zero_topic-1_MiB_non_zero_data-log4 False False 1048576 True LOG4