#[cfg(not(feature = "std"))]
use alloc::vec::Vec;
pub use qp_plonky2_core::fri_proof::{
combine_final_poly_chunks, eval_final_polys_at_point, CompressedFriProof,
CompressedFriQueryRounds, FriBatchMaskProof, FriBatchMaskQuery, FriFinalPolys,
FriInitialTreeProof, FriProof, FriQueryRound, FriQueryStep,
};
pub use qp_plonky2_core::FriChallenges;
use crate::gadgets::polynomial::PolynomialCoeffsExtTarget;
use crate::hash::hash_types::MerkleCapTarget;
use crate::hash::merkle_proofs::MerkleProofTarget;
use crate::iop::ext_target::ExtensionTarget;
use crate::iop::target::Target;
use crate::plonk::plonk_common::salt_size;
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct FriQueryStepTarget<const D: usize> {
pub evals: Vec<ExtensionTarget<D>>,
pub merkle_proof: MerkleProofTarget,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct FriInitialTreeProofTarget {
pub evals_proofs: Vec<(Vec<Target>, MerkleProofTarget)>,
}
impl FriInitialTreeProofTarget {
pub(crate) fn unsalted_eval(
&self,
oracle_index: usize,
poly_index: usize,
salted: bool,
) -> Target {
self.unsalted_evals(oracle_index, salted)[poly_index]
}
fn unsalted_evals(&self, oracle_index: usize, salted: bool) -> &[Target] {
let evals = &self.evals_proofs[oracle_index].0;
&evals[..evals.len() - salt_size(salted)]
}
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct FriQueryRoundTarget<const D: usize> {
pub initial_trees_proof: FriInitialTreeProofTarget,
pub steps: Vec<FriQueryStepTarget<D>>,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct FriBatchMaskQueryTarget<const D: usize> {
pub values: Vec<ExtensionTarget<D>>,
pub merkle_proof: MerkleProofTarget,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct FriBatchMaskProofTarget<const D: usize> {
pub cap: MerkleCapTarget,
pub query_openings: Vec<FriBatchMaskQueryTarget<D>>,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct FriFinalPolysTarget<const D: usize> {
pub chunks: Vec<PolynomialCoeffsExtTarget<D>>,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct FriProofTarget<const D: usize> {
pub commit_phase_merkle_caps: Vec<MerkleCapTarget>,
pub batch_mask_proof: Option<FriBatchMaskProofTarget<D>>,
pub query_round_proofs: Vec<FriQueryRoundTarget<D>>,
pub final_polys: FriFinalPolysTarget<D>,
pub pow_witness: Target,
}
#[derive(Debug)]
pub struct FriChallengesTarget<const D: usize> {
pub fri_alpha: ExtensionTarget<D>,
pub fri_betas: Vec<ExtensionTarget<D>>,
pub fri_pow_response: Target,
pub fri_query_indices: Vec<Target>,
}