pub struct SizeTrackingChannel<'a, F, MerkleScheme_> { /* private fields */ }Expand description
A Merkle channel that counts the bytes a proof would occupy, without checking any of them.
Every receive returns zeros and adds what the real bytes would weigh. Sampling returns zeros too, so nothing here needs a prover.
Counting at this layer measures a protocol by running it, rather than by a formula kept in step with it by hand. Anything speaking this interface can be measured, oracle reduction or not.
Zero survives every fold and equality check a verifier performs. So the verifier takes the path it would on a real proof, reaching the same receives in order.
Implementations§
Source§impl<'a, F, MerkleScheme_> SizeTrackingChannel<'a, F, MerkleScheme_>
impl<'a, F, MerkleScheme_> SizeTrackingChannel<'a, F, MerkleScheme_>
Sourcepub const fn new(scheme: &'a MerkleScheme_) -> Self
pub const fn new(scheme: &'a MerkleScheme_) -> Self
Creates a channel that sizes openings for the given scheme.
Sourcepub const fn proof_size(&self) -> usize
pub const fn proof_size(&self) -> usize
The bytes counted so far.
Trait Implementations§
Source§impl<F, MerkleScheme_> GrindingVerifierChannel for SizeTrackingChannel<'_, F, MerkleScheme_>
impl<F, MerkleScheme_> GrindingVerifierChannel for SizeTrackingChannel<'_, F, MerkleScheme_>
Source§impl<F, MerkleScheme_> IPVerifierChannel<F> for SizeTrackingChannel<'_, F, MerkleScheme_>
impl<F, MerkleScheme_> IPVerifierChannel<F> for SizeTrackingChannel<'_, F, MerkleScheme_>
Source§fn recv_many(&mut self, n: usize) -> Result<Vec<F>, Error>
fn recv_many(&mut self, n: usize) -> Result<Vec<F>, Error>
Receives
n field elements from the prover.Source§fn recv_array<const N: usize>(&mut self) -> Result<[F; N], Error>
fn recv_array<const N: usize>(&mut self) -> Result<[F; N], Error>
Receives a fixed-size array of field elements from the prover.
Source§fn observe_one(&mut self, _val: F) -> F
fn observe_one(&mut self, _val: F) -> F
Observes a single field element, feeding it into the Fiat-Shamir state. Read more
Source§fn observe_many(&mut self, vals: &[F]) -> Vec<F>
fn observe_many(&mut self, vals: &[F]) -> Vec<F>
Observes multiple field elements, feeding them into the Fiat-Shamir state. Read more
Source§fn assert_zero(&mut self, _val: F) -> Result<(), Error>
fn assert_zero(&mut self, _val: F) -> Result<(), Error>
Asserts that a value is zero. Read more
Source§impl<F, MerkleScheme_> MerkleIPVerifierChannel<F> for SizeTrackingChannel<'_, F, MerkleScheme_>
impl<F, MerkleScheme_> MerkleIPVerifierChannel<F> for SizeTrackingChannel<'_, F, MerkleScheme_>
Source§type Commitment = CommittedShape
type Commitment = CommittedShape
A Merkle commitment.
Source§fn recv_merkle_commitment(
&mut self,
leaf_size: usize,
depth: usize,
) -> Result<Self::Commitment, Error>
fn recv_merkle_commitment( &mut self, leaf_size: usize, depth: usize, ) -> Result<Self::Commitment, Error>
Receives a Merkle commitment for a tree with the given depth and leaf size. Read more
Source§fn recv_openings(
&mut self,
commitment: &Self::Commitment,
indices: &[Word],
) -> Result<Vec<F>, Error>
fn recv_openings( &mut self, commitment: &Self::Commitment, indices: &[Word], ) -> Result<Vec<F>, Error>
Receives a multi-opening of leaves, bound by a Merkle commitment. Read more
Source§fn recv_committed_vector(
&mut self,
commitment: &Self::Commitment,
) -> Result<Vec<F>, Error>
fn recv_committed_vector( &mut self, commitment: &Self::Commitment, ) -> Result<Vec<F>, Error>
Receives the full committed vector, bound by a Merkle commitment. Read more
Source§impl<F, MerkleScheme_> WordIPVerifierChannel<F> for SizeTrackingChannel<'_, F, MerkleScheme_>
impl<F, MerkleScheme_> WordIPVerifierChannel<F> for SizeTrackingChannel<'_, F, MerkleScheme_>
Source§fn observe_words(&mut self, words: &[Word]) -> Vec<Word>
fn observe_words(&mut self, words: &[Word]) -> Vec<Word>
Feeds words into the Fiat-Shamir state, each as eight little-endian bytes, and returns them
as this channel’s word type. Read more
Source§fn subset_sum(&mut self, elems: &[F], word: &Word) -> F
fn subset_sum(&mut self, elems: &[F], word: &Word) -> F
Auto Trait Implementations§
impl<'a, F, MerkleScheme_> Freeze for SizeTrackingChannel<'a, F, MerkleScheme_>
impl<'a, F, MerkleScheme_> RefUnwindSafe for SizeTrackingChannel<'a, F, MerkleScheme_>where
MerkleScheme_: RefUnwindSafe,
F: RefUnwindSafe,
impl<'a, F, MerkleScheme_> Send for SizeTrackingChannel<'a, F, MerkleScheme_>
impl<'a, F, MerkleScheme_> Sync for SizeTrackingChannel<'a, F, MerkleScheme_>
impl<'a, F, MerkleScheme_> Unpin for SizeTrackingChannel<'a, F, MerkleScheme_>where
F: Unpin,
impl<'a, F, MerkleScheme_> UnsafeUnpin for SizeTrackingChannel<'a, F, MerkleScheme_>
impl<'a, F, MerkleScheme_> UnwindSafe for SizeTrackingChannel<'a, F, MerkleScheme_>where
MerkleScheme_: RefUnwindSafe,
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
Mutably borrows from an owned value. Read more
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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>
Converts
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>
Converts
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