openvm_stark_backend/
proof.rs1use derivative::Derivative;
2use serde::{Deserialize, Serialize};
3
4use crate::config::{Com, PcsProof, RapPhaseSeqPartialProof, StarkGenericConfig, Val};
5
6#[derive(Serialize, Deserialize, Derivative)]
11#[serde(bound = "")]
12#[derivative(Clone(bound = "Com<SC>: Clone"))]
13pub struct Proof<SC: StarkGenericConfig> {
14 pub commitments: Commitments<Com<SC>>,
16 pub opening: OpeningProof<PcsProof<SC>, SC::Challenge>,
18 pub per_air: Vec<AirProofData<Val<SC>, SC::Challenge>>,
20 pub rap_phase_seq_proof: Option<RapPhaseSeqPartialProof<SC>>,
22}
23
24impl<SC: StarkGenericConfig> Proof<SC> {
25 pub fn get_air_ids(&self) -> Vec<usize> {
26 self.per_air.iter().map(|p| p.air_id).collect()
27 }
28 pub fn get_public_values(&self) -> Vec<Vec<Val<SC>>> {
29 self.per_air
30 .iter()
31 .map(|p| p.public_values.clone())
32 .collect()
33 }
34}
35
36#[derive(Clone, Serialize, Deserialize)]
38pub struct Commitments<Com> {
39 pub main_trace: Vec<Com>,
43 pub after_challenge: Vec<Com>,
47 pub quotient: Com,
49}
50
51#[derive(Clone, Serialize, Deserialize)]
53pub struct OpeningProof<PcsProof, Challenge> {
54 pub proof: PcsProof,
55 pub values: OpenedValues<Challenge>,
56}
57
58#[derive(Clone, Serialize, Deserialize)]
59pub struct OpenedValues<Challenge> {
60 pub preprocessed: Vec<AdjacentOpenedValues<Challenge>>,
62 pub main: Vec<Vec<AdjacentOpenedValues<Challenge>>>,
65 pub after_challenge: Vec<Vec<AdjacentOpenedValues<Challenge>>>,
68 pub quotient: Vec<Vec<Vec<Challenge>>>,
70}
71
72#[derive(Clone, Serialize, Deserialize)]
73pub struct AdjacentOpenedValues<Challenge> {
74 pub local: Vec<Challenge>,
75 pub next: Vec<Challenge>,
76}
77
78#[derive(Clone, Serialize, Deserialize)]
79pub struct AirProofData<Val, Challenge> {
80 pub air_id: usize,
81 pub degree: usize,
83 pub exposed_values_after_challenge: Vec<Vec<Challenge>>,
85 pub public_values: Vec<Val>,
87}