swiftness_proof_parser/annotations/
mod.rs

1pub mod annotation_kind;
2pub mod extract;
3
4use self::annotation_kind::{Annotation, ZAlpha};
5use num_bigint::BigUint;
6
7#[derive(Debug, Clone, PartialEq)]
8pub struct Annotations {
9    pub z: BigUint,
10    pub alpha: BigUint,
11    pub original_commitment_hash: BigUint,
12    pub interaction_commitment_hash: BigUint,
13    pub composition_commitment_hash: BigUint,
14    pub oods_values: Vec<BigUint>,
15    pub fri_layers_commitments: Vec<BigUint>,
16    pub fri_last_layer_coefficients: Vec<BigUint>,
17    pub proof_of_work_nonce: BigUint,
18    pub original_witness_leaves: Vec<BigUint>,
19    pub original_witness_authentications: Vec<BigUint>,
20    pub interaction_witness_leaves: Vec<BigUint>,
21    pub interaction_witness_authentications: Vec<BigUint>,
22    pub composition_witness_leaves: Vec<BigUint>,
23    pub composition_witness_authentications: Vec<BigUint>,
24    pub fri_witnesses: Vec<FriWitness>,
25}
26
27impl Annotations {
28    pub fn new(annotations: &[&str], n_fri_layers: usize) -> anyhow::Result<Annotations> {
29        let ZAlpha { z, alpha } = ZAlpha::extract(annotations)?;
30        Ok(Annotations {
31            z,
32            alpha,
33            original_commitment_hash: Annotation::OriginalCommitmentHash
34                .extract(annotations)?
35                .first()
36                .ok_or(anyhow::anyhow!("No OriginalCommitmentHash in annotations!"))?
37                .clone(),
38            interaction_commitment_hash: Annotation::InteractionCommitmentHash
39                .extract(annotations)?
40                .first()
41                .ok_or(anyhow::anyhow!("No InteractionCommitmentHash in annotations!"))?
42                .clone(),
43            composition_commitment_hash: Annotation::CompositionCommitmentHash
44                .extract(annotations)?
45                .first()
46                .ok_or(anyhow::anyhow!("No CompositionCommitmentHash in annotations!"))?
47                .clone(),
48            oods_values: Annotation::OodsValues.extract(annotations)?,
49            fri_layers_commitments: Annotation::FriLayersCommitments.extract(annotations)?,
50            fri_last_layer_coefficients: Annotation::FriLastLayerCoefficients
51                .extract(annotations)?,
52            proof_of_work_nonce: Annotation::ProofOfWorkNonce
53                .extract(annotations)?
54                .first()
55                .ok_or(anyhow::anyhow!("No ProofOfWorkNonce in annotations!"))?
56                .clone(),
57            original_witness_leaves: Annotation::OriginalWitnessLeaves.extract(annotations)?,
58            original_witness_authentications: Annotation::OriginalWitnessAuthentications
59                .extract(annotations)?,
60            interaction_witness_leaves: Annotation::InteractionWitnessLeaves
61                .extract(annotations)?,
62            interaction_witness_authentications: Annotation::InteractionWitnessAuthentications
63                .extract(annotations)?,
64            composition_witness_leaves: Annotation::CompositionWitnessLeaves
65                .extract(annotations)?,
66            composition_witness_authentications: Annotation::CompositionWitnessAuthentications
67                .extract(annotations)?,
68            fri_witnesses: (1..n_fri_layers)
69                .map(|i| {
70                    Ok(FriWitness {
71                        layer: i,
72                        leaves: Annotation::FriWitnessesLeaves(i).extract(annotations)?,
73                        authentications: Annotation::FriWitnessesAuthentications(i)
74                            .extract(annotations)?,
75                    })
76                })
77                .collect::<anyhow::Result<Vec<_>>>()?,
78        })
79    }
80}
81
82#[derive(Debug, Clone, PartialEq)]
83pub struct FriWitness {
84    pub layer: usize,
85    pub leaves: Vec<BigUint>,
86    pub authentications: Vec<BigUint>,
87}