Skip to main content

miden_stark_transcript/
data.rs

1//! Transcript data container for external transport.
2
3use alloc::vec::Vec;
4
5use serde::{Deserialize, Serialize};
6
7/// Raw transcript data captured by a prover and replayed by a verifier.
8#[derive(Clone, Debug, Serialize, Deserialize)]
9#[serde(bound(serialize = "F: Serialize, C: Serialize"))]
10#[serde(bound(deserialize = "F: Deserialize<'de>, C: Deserialize<'de>"))]
11pub struct TranscriptData<F, C> {
12    fields: Vec<F>,
13    commitments: Vec<C>,
14}
15
16impl<F, C> TranscriptData<F, C> {
17    /// Create transcript data from field and commitment streams.
18    pub fn new(fields: Vec<F>, commitments: Vec<C>) -> Self {
19        Self { fields, commitments }
20    }
21
22    /// Returns the recorded field elements.
23    pub fn fields(&self) -> &[F] {
24        &self.fields
25    }
26
27    /// Returns the recorded commitments.
28    pub fn commitments(&self) -> &[C] {
29        &self.commitments
30    }
31
32    /// Returns field and commitment slices for verifier construction.
33    pub fn as_slices(&self) -> (&[F], &[C]) {
34        (&self.fields, &self.commitments)
35    }
36
37    /// Consume and return the underlying vectors.
38    pub fn into_parts(self) -> (Vec<F>, Vec<C>) {
39        (self.fields, self.commitments)
40    }
41
42    /// Returns the total byte size of the recorded transcript data.
43    pub fn size_in_bytes(&self) -> usize {
44        size_of_val(self.fields.as_slice()) + size_of_val(self.commitments.as_slice())
45    }
46}