1use alloc::vec::Vec;
2
3use p3_commit::Mmcs;
4use p3_field::Field;
5use serde::{Deserialize, Serialize};
6
7#[derive(Serialize, Deserialize, Clone)]
8#[serde(bound(
9 serialize = "Witness: Serialize, InputProof: Serialize",
10 deserialize = "Witness: Deserialize<'de>, InputProof: Deserialize<'de>"
11))]
12pub struct FriProof<F: Field, M: Mmcs<F>, Witness, InputProof> {
13 pub commit_phase_commits: Vec<M::Commitment>,
14 pub commit_pow_witnesses: Vec<Witness>,
15 pub query_proofs: Vec<QueryProof<F, M, InputProof>>,
16 pub final_poly: Vec<F>,
17 pub query_pow_witness: Witness,
18}
19
20#[derive(Serialize, Deserialize, Clone)]
21#[serde(bound(
22 serialize = "InputProof: Serialize",
23 deserialize = "InputProof: Deserialize<'de>",
24))]
25pub struct QueryProof<F: Field, M: Mmcs<F>, InputProof> {
26 pub input_proof: InputProof,
27 pub commit_phase_openings: Vec<CommitPhaseProofStep<F, M>>,
30}
31
32#[derive(Debug, Serialize, Deserialize, Clone)]
33#[serde(bound = "")]
34pub struct CommitPhaseProofStep<F: Field, M: Mmcs<F>> {
35 pub sibling_value: F,
39
40 pub opening_proof: M::Proof,
41}