use crate::poly::univariate::UnivariatePoly;
use alloc::string::String;
use alloc::vec::Vec;
use core::marker::PhantomData;
use hekate_math::TowerField;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct InnerProof<F: TowerField> {
pub trace_commitment: BrakedownCommitment,
pub zerocheck_proof: SumcheckProof<F>,
pub main_logup_aux: LogUpAux<F>,
pub eval_proof: EvalBatchProof<F>,
pub chiplet_commitments: Vec<BrakedownCommitment>,
pub chiplet_zerocheck_proofs: Vec<SumcheckProof<F>>,
pub chiplet_logup_aux: Vec<LogUpAux<F>>,
pub chiplet_eval_proofs: Vec<EvalBatchProof<F>>,
}
impl<F: TowerField> InnerProof<F> {
#[allow(clippy::too_many_arguments)]
pub fn new(
trace_commitment: BrakedownCommitment,
zerocheck_proof: SumcheckProof<F>,
main_logup_aux: LogUpAux<F>,
eval_proof: EvalBatchProof<F>,
chiplet_commitments: Vec<BrakedownCommitment>,
chiplet_zerocheck_proofs: Vec<SumcheckProof<F>>,
chiplet_logup_aux: Vec<LogUpAux<F>>,
chiplet_eval_proofs: Vec<EvalBatchProof<F>>,
) -> Self {
Self {
trace_commitment,
zerocheck_proof,
main_logup_aux,
eval_proof,
chiplet_commitments,
chiplet_zerocheck_proofs,
chiplet_logup_aux,
chiplet_eval_proofs,
}
}
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct BrakedownProof<F: TowerField> {
pub ldt_proofs: Vec<Vec<[u8; 32]>>,
pub opened_columns: Vec<Vec<u8>>,
_marker: PhantomData<F>,
}
impl<F: TowerField> BrakedownProof<F> {
pub fn new(ldt_proofs: Vec<Vec<[u8; 32]>>, opened_columns: Vec<Vec<u8>>) -> Self {
Self {
ldt_proofs,
opened_columns,
_marker: PhantomData,
}
}
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct BrakedownCommitment {
pub root: [u8; 32],
pub num_rows: usize,
pub num_cols: usize,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct SumcheckProof<F: TowerField> {
pub round_polys: Vec<UnivariatePoly<F>>,
pub claimed_evaluation: F,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct EvalBatchProof<F: TowerField> {
pub sumcheck_proof: SumcheckProof<F>,
pub ldt_proof: BrakedownProof<F>,
pub point_evaluations: Vec<(Vec<F>, Vec<F>)>,
#[serde(default)]
pub tensor_vec: Vec<F>,
}
impl<F: TowerField> EvalBatchProof<F> {
pub fn new(
sumcheck_proof: SumcheckProof<F>,
ldt_proof: BrakedownProof<F>,
point_evaluations: Vec<(Vec<F>, Vec<F>)>,
tensor_vec: Vec<F>,
) -> Self {
Self {
sumcheck_proof,
ldt_proof,
point_evaluations,
tensor_vec,
}
}
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct LogUpAux<F: TowerField> {
pub h_evals: Vec<(String, F)>,
pub claimed_sums: Vec<(String, F)>,
}
impl<F: TowerField> LogUpAux<F> {
pub fn new(h_evals: Vec<(String, F)>, claimed_sums: Vec<(String, F)>) -> Self {
Self {
h_evals,
claimed_sums,
}
}
}