use alloc::vec::Vec;
use serde::Serialize;
use crate::fri::reduction_strategies::FriReductionStrategy;
mod challenges;
pub mod oracle;
pub mod proof;
pub mod prover;
pub mod recursive_verifier;
pub mod reduction_strategies;
pub mod structure;
mod validate_shape;
pub mod verifier;
pub mod witness_util;
#[derive(Debug, Clone, Eq, PartialEq, Serialize)]
pub struct FriConfig {
pub rate_bits: usize,
pub cap_height: usize,
pub proof_of_work_bits: u32,
pub reduction_strategy: FriReductionStrategy,
pub num_query_rounds: usize,
}
impl FriConfig {
pub fn rate(&self) -> f64 {
1.0 / ((1 << self.rate_bits) as f64)
}
pub fn fri_params(&self, degree_bits: usize, hiding: bool) -> FriParams {
let reduction_arity_bits = self.reduction_strategy.reduction_arity_bits(
degree_bits,
self.rate_bits,
self.cap_height,
self.num_query_rounds,
);
FriParams {
config: self.clone(),
hiding,
degree_bits,
reduction_arity_bits,
}
}
pub fn num_cap_elements(&self) -> usize {
1 << self.cap_height
}
}
#[derive(Debug, Clone, Eq, PartialEq, Serialize)]
pub struct FriParams {
pub config: FriConfig,
pub hiding: bool,
pub degree_bits: usize,
pub reduction_arity_bits: Vec<usize>,
}
impl FriParams {
pub fn total_arities(&self) -> usize {
self.reduction_arity_bits.iter().sum()
}
pub(crate) fn max_arity_bits(&self) -> Option<usize> {
self.reduction_arity_bits.iter().copied().max()
}
pub fn lde_bits(&self) -> usize {
self.degree_bits + self.config.rate_bits
}
pub fn lde_size(&self) -> usize {
1 << self.lde_bits()
}
pub fn final_poly_bits(&self) -> usize {
self.degree_bits - self.total_arities()
}
pub fn final_poly_len(&self) -> usize {
1 << self.final_poly_bits()
}
}