This commit is contained in:
wborgeaud 2021-09-30 18:58:36 +02:00
parent 94375cdf68
commit dd68971609
4 changed files with 8 additions and 9 deletions

View File

@ -79,11 +79,13 @@ pub struct FriQueryRoundTarget<const D: usize> {
pub steps: Vec<FriQueryStepTarget<D>>, pub steps: Vec<FriQueryStepTarget<D>>,
} }
/// Compressed proofs for FRI query rounds. /// Compressed proof of the FRI query rounds.
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq)] #[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq)]
#[serde(bound = "")] #[serde(bound = "")]
pub struct CompressedFriQueryRounds<F: Extendable<D>, const D: usize> { pub struct CompressedFriQueryRounds<F: Extendable<D>, const D: usize> {
/// Map from initial indices `i` to the `FriInitialProof` for the `i`th leaf.
pub initial_trees_proofs: HashMap<usize, FriInitialTreeProof<F>>, pub initial_trees_proofs: HashMap<usize, FriInitialTreeProof<F>>,
/// For each FRI query step, a map from initial indices `i` to the `FriInitialProof` for the `i`th leaf.
pub steps: Vec<HashMap<usize, FriQueryStep<F, D>>>, pub steps: Vec<HashMap<usize, FriQueryStep<F, D>>>,
} }
@ -112,7 +114,7 @@ pub struct FriProofTarget<const D: usize> {
pub struct CompressedFriProof<F: Extendable<D>, const D: usize> { pub struct CompressedFriProof<F: Extendable<D>, const D: usize> {
/// A Merkle cap for each reduced polynomial in the commit phase. /// A Merkle cap for each reduced polynomial in the commit phase.
pub commit_phase_merkle_caps: Vec<MerkleCap<F>>, pub commit_phase_merkle_caps: Vec<MerkleCap<F>>,
/// Query rounds proofs /// Compressed query rounds proof.
pub query_round_proofs: CompressedFriQueryRounds<F, D>, pub query_round_proofs: CompressedFriQueryRounds<F, D>,
/// The final polynomial in coefficient form. /// The final polynomial in coefficient form.
pub final_poly: PolynomialCoeffs<F::Extension>, pub final_poly: PolynomialCoeffs<F::Extension>,
@ -219,7 +221,7 @@ impl<F: RichField + Extendable<D>, const D: usize> FriProof<F, D> {
} }
impl<F: RichField + Extendable<D>, const D: usize> CompressedFriProof<F, D> { impl<F: RichField + Extendable<D>, const D: usize> CompressedFriProof<F, D> {
/// Decompress all the Merkle paths in the FRI proof and add duplicate indices. /// Decompress all the Merkle paths in the FRI proof and reinsert duplicate indices.
pub fn decompress( pub fn decompress(
self, self,
indices: &[usize], indices: &[usize],
@ -259,7 +261,7 @@ impl<F: RichField + Extendable<D>, const D: usize> CompressedFriProof<F, D> {
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
for mut index in indices.iter().cloned() { for mut index in indices.iter().copied() {
let initial_trees_proof = query_round_proofs.initial_trees_proofs[&index].clone(); let initial_trees_proof = query_round_proofs.initial_trees_proofs[&index].clone();
for (i, (leaves_data, proof)) in for (i, (leaves_data, proof)) in
initial_trees_proof.evals_proofs.into_iter().enumerate() initial_trees_proof.evals_proofs.into_iter().enumerate()
@ -290,7 +292,6 @@ impl<F: RichField + Extendable<D>, const D: usize> CompressedFriProof<F, D> {
.collect::<Vec<_>>(); .collect::<Vec<_>>();
let mut decompressed_query_proofs = Vec::with_capacity(num_reductions); let mut decompressed_query_proofs = Vec::with_capacity(num_reductions);
// Replace the query round proofs with the decompressed versions.
for i in 0..num_reductions { for i in 0..num_reductions {
let initial_trees_proof = FriInitialTreeProof { let initial_trees_proof = FriInitialTreeProof {
evals_proofs: (0..num_initial_trees) evals_proofs: (0..num_initial_trees)

View File

@ -96,7 +96,7 @@ pub struct CompressedProof<F: Extendable<D>, const D: usize> {
pub quotient_polys_cap: MerkleCap<F>, pub quotient_polys_cap: MerkleCap<F>,
/// Purported values of each polynomial at the challenge point. /// Purported values of each polynomial at the challenge point.
pub openings: OpeningSet<F, D>, pub openings: OpeningSet<F, D>,
/// A batch FRI argument for all openings. /// A compressed batch FRI argument for all openings.
pub opening_proof: CompressedFriProof<F, D>, pub opening_proof: CompressedFriProof<F, D>,
} }

View File

@ -5,7 +5,6 @@ use rayon::prelude::*;
use crate::field::extension_field::Extendable; use crate::field::extension_field::Extendable;
use crate::field::field_types::RichField; use crate::field::field_types::RichField;
use crate::fri::commitment::PolynomialBatchCommitment; use crate::fri::commitment::PolynomialBatchCommitment;
use crate::fri::proof::FriProof;
use crate::hash::hash_types::HashOut; use crate::hash::hash_types::HashOut;
use crate::hash::hashing::hash_n_to_hash; use crate::hash::hashing::hash_n_to_hash;
use crate::iop::challenger::Challenger; use crate::iop::challenger::Challenger;

View File

@ -2,11 +2,10 @@ use anyhow::{ensure, Result};
use crate::field::extension_field::Extendable; use crate::field::extension_field::Extendable;
use crate::field::field_types::{Field, RichField}; use crate::field::field_types::{Field, RichField};
use crate::fri::proof::FriProof;
use crate::fri::verifier::verify_fri_proof; use crate::fri::verifier::verify_fri_proof;
use crate::plonk::circuit_data::{CommonCircuitData, VerifierOnlyCircuitData}; use crate::plonk::circuit_data::{CommonCircuitData, VerifierOnlyCircuitData};
use crate::plonk::plonk_common::reduce_with_powers; use crate::plonk::plonk_common::reduce_with_powers;
use crate::plonk::proof::{Proof, ProofWithPublicInputs}; use crate::plonk::proof::ProofWithPublicInputs;
use crate::plonk::vanishing_poly::eval_vanishing_poly; use crate::plonk::vanishing_poly::eval_vanishing_poly;
use crate::plonk::vars::EvaluationVars; use crate::plonk::vars::EvaluationVars;