swiftness_proof_parser/annotations/
mod.rs1pub 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}