Skip to content

test_valid()

Documentation for tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py::test_valid@ffe48572.

Generate fixtures for these test cases for Bogota with:

fill -v tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py::test_valid --fork Bogota

Test the BLS12_G2MUL precompile.

Source code in tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g2mul.py
@pytest.mark.parametrize(
    "input_data,expected_output,vector_gas_value",
    # Test vectors from the reference spec (from the cryptography team)
    vectors_from_file("mul_G2_bls.json")
    + [
        # Basic multiplication test cases.
        pytest.param(
            Spec.INF_G2 + Scalar(0),
            Spec.INF_G2,
            None,
            id="zero_times_inf",
        ),
        pytest.param(
            Spec.INF_G2 + Scalar(1),
            Spec.INF_G2,
            None,
            id="one_times_inf",
        ),
        pytest.param(
            Spec.INF_G2 + Scalar(2),
            Spec.INF_G2,
            None,
            id="two_times_inf",
        ),
        pytest.param(
            Spec.INF_G2 + Scalar(Spec.Q),
            Spec.INF_G2,
            None,
            id="q_times_inf",
        ),
        pytest.param(
            Spec.INF_G2 + Scalar(2**256 - 1),
            Spec.INF_G2,
            None,
            id="max_scalar_times_inf",
        ),
        pytest.param(
            Spec.G2 + Scalar(0),
            Spec.INF_G2,
            None,
            id="zero_times_generator",
        ),
        pytest.param(
            Spec.P2 + Scalar(0),
            Spec.INF_G2,
            None,
            id="zero_times_point",
        ),
        pytest.param(
            Spec.G2 + Scalar(1),
            Spec.G2,
            None,
            id="one_times_generator",
        ),
        pytest.param(
            Spec.P2 + Scalar(1),
            Spec.P2,
            None,
            id="one_times_point",
        ),
        pytest.param(
            Spec.P2 + Scalar(2**256 - 1),
            PointG2(
                (
                    0x2663E1C3431E174CA80E5A84489569462E13B52DA27E7720AF5567941603475F1F9BC0102E13B92A0A21D96B94E9B22,
                    0x6A80D056486365020A6B53E2680B2D72D8A93561FC2F72B960936BB16F509C1A39C4E4174A7C9219E3D7EF130317C05,
                ),
                (
                    0xC49EAD39E9EB7E36E8BC25824299661D5B6D0E200BBC527ECCB946134726BF5DBD861E8E6EC946260B82ED26AFE15FB,
                    0x5397DAD1357CF8333189821B737172B18099ECF7EE8BDB4B3F05EBCCDF40E1782A6C71436D5ACE0843D7F361CBC6DB2,
                ),
            ),
            None,
            id="max_scalar_times_point",
        ),
        # Subgroup related test cases.
        pytest.param(
            Spec.P2 + Scalar(Spec.Q - 1),
            -Spec.P2,  # negated P2
            None,
            id="q_minus_1_times_point",
        ),
        pytest.param(
            Spec.P2 + Scalar(Spec.Q),
            Spec.INF_G2,
            None,
            id="q_times_point",
        ),
        pytest.param(
            Spec.G2 + Scalar(Spec.Q),
            Spec.INF_G2,
            None,
            id="q_times_generator",
        ),
        pytest.param(
            Spec.P2 + Scalar(Spec.Q + 1),
            Spec.P2,
            None,
            id="q_plus_1_times_point",
        ),
        pytest.param(
            Spec.P2 + Scalar(2 * Spec.Q),
            Spec.INF_G2,
            None,
            id="2q_times_point",
        ),
        pytest.param(
            Spec.P2 + Scalar((2**256 // Spec.Q) * Spec.Q),
            Spec.INF_G2,
            None,
            id="large_multiple_of_q_times_point",
        ),
    ],
)
def test_valid(
    state_test: StateTestFiller,
    pre: Alloc,
    post: dict,
    tx: Transaction,
) -> None:
    """Test the BLS12_G2MUL precompile."""
    state_test(
        env=Environment(),
        pre=pre,
        tx=tx,
        post=post,
    )

Parametrized Test Cases

This test generates 26 parametrized test cases across 4 forks.