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<SC>,
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(Serialize, Deserialize, Derivative)]
53#[serde(bound = "")]
54#[derivative(Clone(bound = ""))]
55pub struct OpeningProof<SC: StarkGenericConfig> {
56 pub proof: PcsProof<SC>,
57 pub values: OpenedValues<SC::Challenge>,
58 pub deep_pow_witness: Val<SC>,
60}
61
62#[derive(Clone, Serialize, Deserialize)]
63pub struct OpenedValues<Challenge> {
64 pub preprocessed: Vec<AdjacentOpenedValues<Challenge>>,
66 pub main: Vec<Vec<AdjacentOpenedValues<Challenge>>>,
69 pub after_challenge: Vec<Vec<AdjacentOpenedValues<Challenge>>>,
72 pub quotient: Vec<Vec<Vec<Challenge>>>,
74}
75
76#[derive(Clone, Serialize, Deserialize)]
77pub struct AdjacentOpenedValues<Challenge> {
78 pub local: Vec<Challenge>,
79 pub next: Vec<Challenge>,
80}
81
82#[derive(Clone, Serialize, Deserialize)]
83pub struct AirProofData<Val, Challenge> {
84 pub air_id: usize,
85 pub degree: usize,
87 pub exposed_values_after_challenge: Vec<Vec<Challenge>>,
89 pub public_values: Vec<Val>,
91}