Skip to content

test_extra_consolidations()

Documentation for tests/prague/eip7251_consolidations/test_modified_consolidation_contract.py::test_extra_consolidations@ffe48572.

Generate fixtures for these test cases for Bogota with:

fill -v tests/prague/eip7251_consolidations/test_modified_consolidation_contract.py::test_extra_consolidations --fork Bogota

Test how clients were to behave with more than 2 consolidations per block.

Source code in tests/prague/eip7251_consolidations/test_modified_consolidation_contract.py
@pytest.mark.parametrize(
    "requests_list",
    [
        pytest.param(
            [],
            id="empty_request_list",
        ),
        pytest.param(
            [
                *consolidation_list_with_custom_fee(1),
            ],
            id="1_consolidation_request",
        ),
        pytest.param(
            [
                *consolidation_list_with_custom_fee(2),
            ],
            id="2_consolidation_requests",
        ),
        pytest.param(
            [
                *consolidation_list_with_custom_fee(3),
            ],
            id="3_consolidation_requests",
        ),
        pytest.param(
            [
                *consolidation_list_with_custom_fee(4),
            ],
            id="4_consolidation_requests",
        ),
        pytest.param(
            [
                *consolidation_list_with_custom_fee(5),
            ],
            id="5_consolidation_requests",
        ),
    ],
)
def test_extra_consolidations(
    blockchain_test: BlockchainTestFiller,
    pre: Alloc,
    requests_list: List[ConsolidationRequest],
) -> None:
    """
    Test how clients were to behave with more than 2 consolidations per block.
    """
    modified_code: Bytecode = Bytecode()
    memory_offset: int = 0

    for consolidation_request in requests_list:
        record = bytes(consolidation_request)
        assert len(record) == 116, (
            "Expected consolidation request to be of size 116 but got size "
            f"{len(record)}"
        )
        # Store records contiguously from offset 0 so the returned data is
        # exactly the concatenated records (no gap, no trailing padding).
        modified_code += Om.MSTORE(record, memory_offset)
        memory_offset += len(record)

    modified_code += Op.RETURN(0, memory_offset)

    pre[ConsolidationRequest.system_contract_address] = Account(
        code=modified_code,
        nonce=1,
        balance=0,
    )

    # given a list of consolidation requests construct a consolidation request
    # transaction
    consolidation_request_transaction = SystemContractInteractionTransaction(
        requests=requests_list
    )
    # prepare consolidation senders
    prepared = consolidation_request_transaction.update_pre(pre=pre)
    # get transaction list
    txs: List[Transaction] = prepared.transactions()

    blockchain_test(
        pre=pre,
        blocks=[
            Block(
                txs=txs,
                header_verify=Header(requests_hash=Requests(*requests_list)),
            ),
        ],
        post={},
    )

Parametrized Test Cases

This test generates 6 parametrized test cases across 4 forks.