Skip to content

test_invalid_multi_inf()

Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py::test_invalid_multi_inf@88e9fb8f.

Generate fixtures for these test cases for Osaka with:

fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py::test_invalid_multi_inf --fork Osaka

Test maximum input given the current environment gas limit for the BLS12_PAIRING precompile and an invalid tail.

Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_pairing.py
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
@pytest.mark.slow
@pytest.mark.parametrize("precompile_gas", [None], ids=[""])
@pytest.mark.parametrize("expected_output", [Spec.INVALID], ids=[""])
def test_invalid_multi_inf(
    state_test: StateTestFiller,
    pre: Alloc,
    call_contract_address: Address,
    sender: EOA,
    fork: Fork,
    post: dict,
) -> None:
    """
    Test maximum input given the current environment gas limit for the
    BLS12_PAIRING precompile and an invalid tail.
    """
    intrinsic_gas_cost_calculator = fork.transaction_intrinsic_cost_calculator()
    memory_expansion_gas_calculator = fork.memory_expansion_gas_calculator()
    extra_gas = 100_000

    tx_gas_limit_cap = fork.transaction_gas_limit_cap()
    max_gas_limit = Environment().gas_limit if tx_gas_limit_cap is None else tx_gas_limit_cap

    inf_data = Spec.INF_G1 + Spec.INF_G2
    input_data = PointG1(Spec.P, 0) + Spec.INF_G2

    while True:
        precompile_gas = pairing_gas(len(input_data + inf_data))
        new_tx_gas_limit = (
            extra_gas
            + intrinsic_gas_cost_calculator(calldata=input_data + inf_data)
            + memory_expansion_gas_calculator(new_bytes=len(input_data + inf_data))
            + precompile_gas
        )
        if new_tx_gas_limit > max_gas_limit:
            break
        tx_gas_limit = new_tx_gas_limit
        input_data = inf_data + input_data

    tx = Transaction(
        gas_limit=tx_gas_limit,
        data=input_data,
        to=call_contract_address,
        sender=sender,
    )
    state_test(
        env=Environment(),
        pre=pre,
        tx=tx,
        post=post,
    )

Parametrized Test Cases

This test case is only parametrized by fork and fixture format.

Test ID (Abbreviated) expected_output precompile_gas precompile_address
...fork_Prague-state_test--- None 15
...fork_Prague-blockchain_test_from_state_test--- None 15
...fork_Osaka-state_test--- None 15
...fork_Osaka-blockchain_test_from_state_test--- None 15