protocol.fri#
FRI (Fast Reed-Solomon IOP of Proximity) protocol.
Implements FRI folding, verification, and proving matching Plonky3’s FRI.
- Reference:
p3-fri-0.4.1/src/ (prover.rs, verifier.rs, two_adic_pcs.rs)
Attributes#
Classes#
Output of FRI commit phase. |
|
One round of a FRI query opening. |
|
FRI query proof for a single query index. |
|
Complete FRI proof. |
Functions#
|
Fold evaluations on coset: f_even(y) + beta * f_odd(y). |
|
Lagrange interpolation fold at challenge beta. |
|
Hash pair of extension field evaluations as FRI Merkle leaf. |
|
Pair consecutive FF4 elements into 8-element Merkle leaves. |
|
Verify single FRI query: fold chain + Merkle proofs + final poly check. |
|
Verify FRI proof: transcript replay and structural consistency. |
|
Fold bit-reversed evaluations: adjacent pairs are conjugates. |
|
FRI commit phase: iterative folding with Merkle commitments. |
|
Generate FRI query opening for a single query index. |
|
Full FRI proof generation. |
Module Contents#
- class protocol.fri.CommitPhaseResult[source]#
Output of FRI commit phase.
- commits: list[primitives.field.Digest][source]#
- trees: list[list[list[primitives.field.Digest]]][source]#
- class protocol.fri.FriQueryStep[source]#
One round of a FRI query opening.
- opening_proof: primitives.field.MerklePath[source]#
- class protocol.fri.FriQueryResult[source]#
FRI query proof for a single query index.
- commit_phase_openings: list[FriQueryStep][source]#
- class protocol.fri.CommitPhaseOutput[source]#
Complete FRI proof.
- commit_phase_commits: list[primitives.field.Digest][source]#
- query_proofs: list[FriQueryResult][source]#
- protocol.fri.fri_fold(evals: list[list[int]], challenge: list[int], log_domain_size: int, coset_shift: primitives.field.Fe) list[list[int]][source]#
Fold evaluations on coset: f_even(y) + beta * f_odd(y).
- Reference:
p3-fri two_adic_pcs.rs (TwoAdicFriFolder::fold_row)
- protocol.fri.fold_row(index: int, log_height: int, beta: primitives.field.FF4, e0: primitives.field.FF4, e1: primitives.field.FF4) primitives.field.FF4[source]#
Lagrange interpolation fold at challenge beta.
- Reference:
p3-fri two_adic_pcs.rs (TwoAdicFriFolding::fold_row)
- protocol.fri.hash_fri_leaf(e0: primitives.field.FF4, e1: primitives.field.FF4) primitives.field.Digest[source]#
Hash pair of extension field evaluations as FRI Merkle leaf.
- Reference:
p3-merkle-tree mmcs.rs (verify_batch leaf hashing)
- protocol.fri.ef4_pairs_to_leaves(evals: list[list[int]]) list[list[int]][source]#
Pair consecutive FF4 elements into 8-element Merkle leaves.
- protocol.fri.fri_verify_query(commit_phase_commits: list[primitives.field.Digest], betas: list[list[int]], query_index: int, query_proof: dict, reduced_opening: list[int], final_poly: list[list[int]], log_max_height: int, log_final_poly_len: int) list[int][source]#
Verify single FRI query: fold chain + Merkle proofs + final poly check.
- Reference:
p3-fri verifier.rs (verify_query)
- protocol.fri.verify_fri(commit_phase_commits: list[primitives.field.Digest], final_poly: list[list[int]], query_proofs: list[dict], log_blowup: int, log_final_poly_len: int, num_queries: int) bool[source]#
Verify FRI proof: transcript replay and structural consistency.
Note: Full fold-chain verification requires reduced_openings from PCS. This function verifies transcript replay, query index derivation, and proof structure (lengths, digest sizes).
- Reference:
p3-fri verifier.rs (verify_fri)
- protocol.fri.fold_matrix(evals_bit_reversed: list[list[int]], beta: primitives.field.FF4, log_height: int) list[list[int]][source]#
Fold bit-reversed evaluations: adjacent pairs are conjugates.
- Reference:
p3-fri two_adic_pcs.rs (TwoAdicFriFolding::fold_matrix)
- protocol.fri.commit_phase(evals_bit_reversed: list[list[int]], log_blowup: int, log_final_poly_len: int, challenger: primitives.transcript.Challenger, commit_pow_bits: int = 0, reduced_openings_by_height: dict[int, list[list[int]]] | None = None) CommitPhaseResult[source]#
FRI commit phase: iterative folding with Merkle commitments.
For multi-height FRI, reduced_openings_by_height maps log_height to bit-reversed reduced evaluations at that height. After folding to a given height, the corresponding reduced opening is rolled in using beta^2 as the combination factor (matching the verifier).
- Reference:
p3-fri prover.rs (commit_phase)
- protocol.fri.answer_query(trees: list[list[list[primitives.field.Digest]]], all_round_evals: list[list[list[int]]], start_index: int, num_rounds: int) list[FriQueryStep][source]#
Generate FRI query opening for a single query index.
- Reference:
p3-fri prover.rs (answer_query)
- protocol.fri.prove_fri(evals_bit_reversed: list[list[int]], log_blowup: int, log_final_poly_len: int, num_queries: int, challenger: primitives.transcript.Challenger) CommitPhaseOutput[source]#
Full FRI proof generation.
- Reference:
p3-fri prover.rs (prove)