pub struct ZkSumcheckData<F, EF> {
pub mu_tilde: EF,
pub ell_zk: usize,
pub round_coefficients: Vec<Vec<EF>>,
pub pow_witnesses: Vec<F>,
}Expand description
Per-round prover output of the HVZK sumcheck protocol.
- Prover writes;
- Verifier reads back during Fiat-Shamir replay.
One instance covers a full run of k rounds.
§Wire format
Per round, the polynomial has coefficient layout
[ c_0, c_1, c_2, ..., c_d ] with d = max(ell_zk - 1, 2)The linear coefficient c_1 is dropped on the wire.
The verifier reconstructs c_1 from the affine identity
h_j(0) + h_j(1) = 2 * c_0 + sum_{i >= 1} c_i = targetapplied to the previous round’s target.
§Soundness link to Lemma 6.4
Valid transcripts form an affine subspace of dimension 1 + k * (ell_zk - 1).
The k dropped linear coefficients are exactly the redundant degrees of freedom of the rank-nullity argument.
Fields§
§mu_tilde: EFSum of all mask polynomial evaluations across the boolean hypercube {0,1}^k.
Observed on the transcript before the verifier samples the combining challenge. Lives in the extension field because the mask coefficients do.
ell_zk: usizeMessage length of the zero-knowledge mask code.
The verifier rejects up front if its own expected value disagrees with this.
Pinning this in the transcript closes a non-injectivity gap in the wire-length check: lengths 2 and 3 share a wire layout.
round_coefficients: Vec<Vec<EF>>Per-round wire payload with the linear coefficient dropped.
One entry per sumcheck round.
Layout per entry: [c_0, c_2, c_3, ..., c_d] with d = max(ell_zk - 1, 2).
pow_witnesses: Vec<F>Per-round proof-of-work witnesses.
Length equals the number of rounds when grinding is enabled.
Empty when pow_bits == 0.
Trait Implementations§
Source§impl<F: Clone, EF: Clone> Clone for ZkSumcheckData<F, EF>
impl<F: Clone, EF: Clone> Clone for ZkSumcheckData<F, EF>
Source§fn clone(&self) -> ZkSumcheckData<F, EF>
fn clone(&self) -> ZkSumcheckData<F, EF>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<F, EF: Field> Default for ZkSumcheckData<F, EF>
impl<F, EF: Field> Default for ZkSumcheckData<F, EF>
Source§impl<'de, F, EF> Deserialize<'de> for ZkSumcheckData<F, EF>where
F: Deserialize<'de>,
EF: Deserialize<'de>,
impl<'de, F, EF> Deserialize<'de> for ZkSumcheckData<F, EF>where
F: Deserialize<'de>,
EF: Deserialize<'de>,
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl<F, EF> Freeze for ZkSumcheckData<F, EF>where
EF: Freeze,
impl<F, EF> RefUnwindSafe for ZkSumcheckData<F, EF>where
EF: RefUnwindSafe,
F: RefUnwindSafe,
impl<F, EF> Send for ZkSumcheckData<F, EF>
impl<F, EF> Sync for ZkSumcheckData<F, EF>
impl<F, EF> Unpin for ZkSumcheckData<F, EF>
impl<F, EF> UnsafeUnpin for ZkSumcheckData<F, EF>where
EF: UnsafeUnpin,
impl<F, EF> UnwindSafe for ZkSumcheckData<F, EF>where
EF: UnwindSafe,
F: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more