swiftness/
transform.rs

1use swiftness_air::{
2    dynamic::DynamicParams,
3    public_memory::PublicInput as PublicInputVerifier,
4    trace::{
5        config::Config as TraceConfigVerifier, Decommitment as TraceDecommitmentVerifier,
6        UnsentCommitment as TraceUnsentCommitmentVerifier, Witness as TraceWitnessVerifier,
7    },
8    types::{AddrValue, Page, SegmentInfo as SegmentInfoVerifier},
9};
10use swiftness_commitment::{
11    table::{
12        config::Config as TableConfigVerifier,
13        types::{
14            Decommitment as TableDecommitmentVerifier, Witness as TableCommitmentWitnessVerifier,
15        },
16    },
17    vector::{
18        config::Config as VectorConfigVerifier, types::Witness as VectorCommitmentWitnessVerifier,
19    },
20};
21use swiftness_fri::{
22    config::Config as FriConfigVerifier,
23    types::{
24        LayerWitness, UnsentCommitment as FriUnsentCommitmentVerifier,
25        Witness as FriWitnessVerifier,
26    },
27};
28use swiftness_pow::{
29    config::Config as PowConfigVerifier, pow::UnsentCommitment as PowUnsentCommitmentVerifier,
30};
31use swiftness_proof_parser::{self, stark_proof};
32use swiftness_stark::{
33    config::StarkConfig as StarkConfigVerifier,
34    types::{
35        StarkProof as StarkProofVerifier, StarkUnsentCommitment as StarkUnsentCommitmentVerifier,
36        StarkWitness as StarkWitnessVerifier,
37    },
38};
39
40pub trait TransformTo<T> {
41    fn transform_to(self) -> T;
42}
43
44impl TransformTo<StarkProofVerifier> for stark_proof::StarkProof {
45    fn transform_to(self) -> StarkProofVerifier {
46        StarkProofVerifier {
47            config: self.config.transform_to(),
48            public_input: self.public_input.transform_to(),
49            unsent_commitment: self.unsent_commitment.transform_to(),
50            witness: self.witness.transform_to(),
51        }
52    }
53}
54
55impl TransformTo<StarkConfigVerifier> for stark_proof::StarkConfig {
56    fn transform_to(self) -> StarkConfigVerifier {
57        StarkConfigVerifier {
58            traces: self.traces.transform_to(),
59            composition: self.composition.transform_to(),
60            fri: self.fri.transform_to(),
61            proof_of_work: self.proof_of_work.transform_to(),
62            log_trace_domain_size: self.log_trace_domain_size.into(),
63            n_queries: self.n_queries.into(),
64            log_n_cosets: self.log_n_cosets.into(),
65            n_verifier_friendly_commitment_layers: self
66                .n_verifier_friendly_commitment_layers
67                .into(),
68        }
69    }
70}
71
72impl TransformTo<PowConfigVerifier> for stark_proof::ProofOfWorkConfig {
73    fn transform_to(self) -> PowConfigVerifier {
74        PowConfigVerifier { n_bits: self.n_bits as u8 }
75    }
76}
77
78impl TransformTo<FriConfigVerifier> for stark_proof::FriConfig {
79    fn transform_to(self) -> FriConfigVerifier {
80        FriConfigVerifier {
81            log_input_size: self.log_input_size.into(),
82            n_layers: self.n_layers.into(),
83            inner_layers: self.inner_layers.into_iter().map(|x| x.transform_to()).collect(),
84            fri_step_sizes: self.fri_step_sizes.into_iter().map(|x| x.into()).collect(),
85            log_last_layer_degree_bound: self.log_last_layer_degree_bound.into(),
86        }
87    }
88}
89
90impl TransformTo<TraceConfigVerifier> for stark_proof::TracesConfig {
91    fn transform_to(self) -> TraceConfigVerifier {
92        TraceConfigVerifier {
93            original: self.original.transform_to(),
94            interaction: self.interaction.transform_to(),
95        }
96    }
97}
98
99impl TransformTo<TableConfigVerifier> for stark_proof::TableCommitmentConfig {
100    fn transform_to(self) -> TableConfigVerifier {
101        TableConfigVerifier { n_columns: self.n_columns.into(), vector: self.vector.transform_to() }
102    }
103}
104
105impl TransformTo<VectorConfigVerifier> for stark_proof::VectorCommitmentConfig {
106    fn transform_to(self) -> VectorConfigVerifier {
107        VectorConfigVerifier {
108            height: self.height.into(),
109            n_verifier_friendly_commitment_layers: self
110                .n_verifier_friendly_commitment_layers
111                .into(),
112        }
113    }
114}
115
116impl TransformTo<PublicInputVerifier> for stark_proof::PublicInput {
117    fn transform_to(self) -> PublicInputVerifier {
118        let dynamic_params = match self.dynamic_params.is_empty() {
119            true => None,
120            false => {
121                let params: Vec<u32> = self.dynamic_params.values().cloned().collect();
122                Some(DynamicParams::from(params))
123            }
124        };
125
126        PublicInputVerifier {
127            log_n_steps: self.log_n_steps.into(),
128            range_check_min: self.range_check_min.into(),
129            range_check_max: self.range_check_max.into(),
130            layout: self.layout.into(),
131            dynamic_params,
132            segments: self.segments.into_iter().map(|x| x.transform_to()).collect(),
133            padding_addr: self.padding_addr.into(),
134            padding_value: self.padding_value.into(),
135            main_page: Page(self.main_page.into_iter().map(|x| x.transform_to()).collect()),
136            continuous_page_headers: vec![],
137        }
138    }
139}
140
141impl TransformTo<SegmentInfoVerifier> for stark_proof::SegmentInfo {
142    fn transform_to(self) -> SegmentInfoVerifier {
143        SegmentInfoVerifier { begin_addr: self.begin_addr.into(), stop_ptr: self.stop_ptr.into() }
144    }
145}
146
147impl TransformTo<AddrValue> for stark_proof::PubilcMemoryCell {
148    fn transform_to(self) -> AddrValue {
149        AddrValue { address: self.address.into(), value: self.value.into() }
150    }
151}
152
153impl TransformTo<StarkUnsentCommitmentVerifier> for stark_proof::StarkUnsentCommitment {
154    fn transform_to(self) -> StarkUnsentCommitmentVerifier {
155        StarkUnsentCommitmentVerifier {
156            traces: self.traces.transform_to(),
157            composition: self.composition.into(),
158            oods_values: self.oods_values.into_iter().map(|x| x.into()).collect(),
159            fri: self.fri.transform_to(),
160            proof_of_work: self.proof_of_work.transform_to(),
161        }
162    }
163}
164
165impl TransformTo<TraceUnsentCommitmentVerifier> for stark_proof::TracesUnsentCommitment {
166    fn transform_to(self) -> TraceUnsentCommitmentVerifier {
167        TraceUnsentCommitmentVerifier {
168            original: self.original.into(),
169            interaction: self.interaction.into(),
170        }
171    }
172}
173
174impl TransformTo<FriUnsentCommitmentVerifier> for stark_proof::FriUnsentCommitment {
175    fn transform_to(self) -> FriUnsentCommitmentVerifier {
176        FriUnsentCommitmentVerifier {
177            last_layer_coefficients: self
178                .last_layer_coefficients
179                .into_iter()
180                .map(|x| x.into())
181                .collect(),
182            inner_layers: self.inner_layers.into_iter().map(|x| x.into()).collect(),
183        }
184    }
185}
186
187impl TransformTo<PowUnsentCommitmentVerifier> for stark_proof::ProofOfWorkUnsentCommitment {
188    fn transform_to(self) -> PowUnsentCommitmentVerifier {
189        PowUnsentCommitmentVerifier { nonce: self.nonce.to_u64_digits()[0] }
190    }
191}
192
193impl TransformTo<StarkWitnessVerifier> for stark_proof::StarkWitness {
194    fn transform_to(self) -> StarkWitnessVerifier {
195        StarkWitnessVerifier {
196            traces_decommitment: self.traces_decommitment.transform_to(),
197            traces_witness: self.traces_witness.transform_to(),
198            composition_decommitment: self.composition_decommitment.transform_to(),
199            composition_witness: self.composition_witness.transform_to(),
200            fri_witness: self.fri_witness.transform_to(),
201        }
202    }
203}
204
205impl TransformTo<TraceDecommitmentVerifier> for stark_proof::TracesDecommitment {
206    fn transform_to(self) -> TraceDecommitmentVerifier {
207        TraceDecommitmentVerifier {
208            original: self.original.transform_to(),
209            interaction: self.interaction.transform_to(),
210        }
211    }
212}
213
214impl TransformTo<TableDecommitmentVerifier> for stark_proof::TableDecommitment {
215    fn transform_to(self) -> TableDecommitmentVerifier {
216        TableDecommitmentVerifier { values: self.values.into_iter().map(|x| x.into()).collect() }
217    }
218}
219
220impl TransformTo<TraceWitnessVerifier> for stark_proof::TracesWitness {
221    fn transform_to(self) -> TraceWitnessVerifier {
222        TraceWitnessVerifier {
223            original: self.original.transform_to(),
224            interaction: self.interaction.transform_to(),
225        }
226    }
227}
228
229impl TransformTo<TableCommitmentWitnessVerifier> for stark_proof::TableCommitmentWitness {
230    fn transform_to(self) -> TableCommitmentWitnessVerifier {
231        TableCommitmentWitnessVerifier { vector: self.vector.transform_to() }
232    }
233}
234
235impl TransformTo<VectorCommitmentWitnessVerifier> for stark_proof::VectorCommitmentWitness {
236    fn transform_to(self) -> VectorCommitmentWitnessVerifier {
237        VectorCommitmentWitnessVerifier {
238            authentications: self.authentications.into_iter().map(|x| x.into()).collect(),
239        }
240    }
241}
242
243impl TransformTo<FriWitnessVerifier> for stark_proof::FriWitness {
244    fn transform_to(self) -> FriWitnessVerifier {
245        FriWitnessVerifier { layers: self.layers.into_iter().map(|x| x.transform_to()).collect() }
246    }
247}
248
249impl TransformTo<LayerWitness> for stark_proof::FriLayerWitness {
250    fn transform_to(self) -> LayerWitness {
251        LayerWitness {
252            leaves: self.leaves.into_iter().map(|x| x.into()).collect(),
253            table_witness: self.table_witness.transform_to(),
254        }
255    }
256}
257
258impl TransformTo<TableCommitmentWitnessVerifier> for stark_proof::TableCommitmentWitnessFlat {
259    fn transform_to(self) -> TableCommitmentWitnessVerifier {
260        TableCommitmentWitnessVerifier { vector: self.vector.transform_to() }
261    }
262}
263
264impl TransformTo<VectorCommitmentWitnessVerifier> for stark_proof::VectorCommitmentWitnessFlat {
265    fn transform_to(self) -> VectorCommitmentWitnessVerifier {
266        VectorCommitmentWitnessVerifier {
267            authentications: self.authentications.into_iter().map(|x| x.into()).collect(),
268        }
269    }
270}