pub struct CpuTranscript { /* private fields */ }Expand description
SIMD-optimized transcript backed by Plonky3’s DuplexChallenger.
Produces identical Fiat-Shamir challenges as the standard DuplexSponge transcript,
but with ~4x faster proof-of-work grinding on aarch64 NEON (8x on x86 AVX2).
Trait Implementations§
Source§impl Clone for CpuTranscript
impl Clone for CpuTranscript
Source§fn clone(&self) -> CpuTranscript
fn clone(&self) -> CpuTranscript
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for CpuTranscript
impl Debug for CpuTranscript
Source§impl FiatShamirTranscript<BabyBearPoseidon2Config> for CpuTranscript
impl FiatShamirTranscript<BabyBearPoseidon2Config> for CpuTranscript
fn observe(&mut self, value: BabyBear)
fn sample(&mut self) -> BabyBear
Source§fn observe_commit(&mut self, digest: [BabyBear; 8])
fn observe_commit(&mut self, digest: [BabyBear; 8])
Implementations should pass through to Self::observe, but no default implementation is
provided since an explicit conversion from
Digest to array of F is required.Source§fn grind(&mut self, bits: usize) -> BabyBear
fn grind(&mut self, bits: usize) -> BabyBear
Finds a proof-of-work witness
w such that Self::check_witness(bits, w) holds, by
brute force over the base field.fn observe_ext(&mut self, value: <SC as StarkProtocolConfig>::EF)
fn sample_ext(&mut self) -> <SC as StarkProtocolConfig>::EF
Source§fn sample_bits(&mut self, bits: usize) -> u64
fn sample_bits(&mut self, bits: usize) -> u64
Samples and returns an integer in the range [0, 2^bits). Read more
Source§fn check_witness(
&mut self,
bits: usize,
witness: <SC as StarkProtocolConfig>::F,
) -> bool
fn check_witness( &mut self, bits: usize, witness: <SC as StarkProtocolConfig>::F, ) -> bool
Checks a proof-of-work witness: observes
witness into the transcript and accepts iff the
next Self::sample_bits is zero (probability ≈ 2^{-bits} for a random witness, so
Self::grind tries ≈ 2^bits witnesses to find one). Read moreSource§impl From<Poseidon2<MontyField31<BabyBearParameters>, Poseidon2ExternalLayerMonty31<BabyBearParameters, WIDTH>, Poseidon2InternalLayerMonty31<BabyBearParameters, WIDTH, BabyBearInternalLayerParameters>, WIDTH, p3_baby_bear::::poseidon2::Poseidon2BabyBear::{constant#0}>> for CpuTranscript
impl From<Poseidon2<MontyField31<BabyBearParameters>, Poseidon2ExternalLayerMonty31<BabyBearParameters, WIDTH>, Poseidon2InternalLayerMonty31<BabyBearParameters, WIDTH, BabyBearInternalLayerParameters>, WIDTH, p3_baby_bear::::poseidon2::Poseidon2BabyBear::{constant#0}>> for CpuTranscript
Auto Trait Implementations§
impl Freeze for CpuTranscript
impl RefUnwindSafe for CpuTranscript
impl Send for CpuTranscript
impl Sync for CpuTranscript
impl Unpin for CpuTranscript
impl UnsafeUnpin for CpuTranscript
impl UnwindSafe for CpuTranscript
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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§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