Skip to content

test_builder_request_out_of_gas()

Documentation for tests/amsterdam/eip8282_builder_execution_requests/test_builder_requests_out_of_gas.py::test_builder_request_out_of_gas@343274cc.

Generate fixtures for these test cases for Amsterdam with:

fill -v tests/amsterdam/eip8282_builder_execution_requests/test_builder_requests_out_of_gas.py::test_builder_request_out_of_gas --fork Amsterdam

Test that a builder request whose triggering call runs out of gas is not included, while the other requests in the block are.

The relay contract self-measures the required gas and forwards one gas less than needed to the invalid request, so the out-of-gas holds across forks without any hard-coded gas value.

Source code in tests/amsterdam/eip8282_builder_execution_requests/test_builder_requests_out_of_gas.py
 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
 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
@pytest.mark.parametrize(
    "system_contract_interactions_per_block",
    [
        pytest.param(
            [
                [
                    SystemContractInteractionMeasuredOutOfGasContract(
                        requests=[
                            BuilderDepositRequest(
                                pubkey=0x01,
                                withdrawal_credentials=0x02,
                                amount=MIN_DEPOSIT_GWEI,
                                signature=0x03,
                                fee=BuilderDepositRequest.get_fee(0),
                            ),
                            BuilderDepositRequest(
                                pubkey=0x04,
                                withdrawal_credentials=0x05,
                                amount=MIN_DEPOSIT_GWEI,
                                signature=0x06,
                                fee=BuilderDepositRequest.get_fee(0),
                            ),
                            BuilderDepositRequest(
                                pubkey=0x07,
                                withdrawal_credentials=0x08,
                                amount=MIN_DEPOSIT_GWEI,
                                signature=0x09,
                                fee=BuilderDepositRequest.get_fee(0),
                                # Starved of gas by the relay contract.
                                valid=False,
                            ),
                        ],
                    ),
                ],
            ],
            id="single_block_builder_deposit_out_of_gas",
        ),
        pytest.param(
            [
                [
                    SystemContractInteractionMeasuredOutOfGasContract(
                        requests=[
                            BuilderExitRequest(
                                pubkey=0x01,
                                fee=BuilderExitRequest.get_fee(0),
                            ),
                            BuilderExitRequest(
                                pubkey=0x02,
                                fee=BuilderExitRequest.get_fee(0),
                            ),
                            BuilderExitRequest(
                                pubkey=0x03,
                                fee=BuilderExitRequest.get_fee(0),
                                # Starved of gas by the relay contract.
                                valid=False,
                            ),
                        ],
                    ),
                ],
            ],
            id="single_block_builder_exit_out_of_gas",
        ),
    ],
)
def test_builder_request_out_of_gas(
    blockchain_test: BlockchainTestFiller,
    pre: Alloc,
    blocks: List[Block],
) -> None:
    """
    Test that a builder request whose triggering call runs out of gas is not
    included, while the other requests in the block are.

    The relay contract self-measures the required gas and forwards one gas less
    than needed to the invalid request, so the out-of-gas holds across forks
    without any hard-coded gas value.
    """
    blockchain_test(pre=pre, post={}, blocks=blocks)

Parametrized Test Cases

This test generates 2 parametrized test cases across 1 fork.