pub struct FRIFolder<'a, 'b, F, FA, P, NTT, MerkleProver, VCS, Hal>where
FA: BinaryField,
F: BinaryField,
P: PackedField<Scalar = F>,
MerkleProver: MerkleTreeProver<F, Scheme = VCS>,
VCS: MerkleTreeScheme<F>,
Hal: ComputeLayer<F>,{ /* private fields */ }
Implementations§
Source§impl<'a, 'b, F, FA, P, NTT, MerkleProver, VCS, Hal> FRIFolder<'a, 'b, F, FA, P, NTT, MerkleProver, VCS, Hal>where
F: TowerField + ExtensionField<FA>,
FA: BinaryField,
P: PackedField<Scalar = F>,
NTT: AdditiveNTT<FA> + Sync,
MerkleProver: MerkleTreeProver<F, Scheme = VCS>,
VCS: MerkleTreeScheme<F, Digest: SerializeBytes>,
Hal: ComputeLayer<F>,
impl<'a, 'b, F, FA, P, NTT, MerkleProver, VCS, Hal> FRIFolder<'a, 'b, F, FA, P, NTT, MerkleProver, VCS, Hal>where
F: TowerField + ExtensionField<FA>,
FA: BinaryField,
P: PackedField<Scalar = F>,
NTT: AdditiveNTT<FA> + Sync,
MerkleProver: MerkleTreeProver<F, Scheme = VCS>,
VCS: MerkleTreeScheme<F, Digest: SerializeBytes>,
Hal: ComputeLayer<F>,
Sourcepub fn new(
hal: &'b Hal,
params: &'a FRIParams<F, FA>,
ntt: &'a NTT,
merkle_prover: &'a MerkleProver,
codeword: &'a [P],
committed: &'a MerkleProver::Committed,
) -> Result<Self, Error>
pub fn new( hal: &'b Hal, params: &'a FRIParams<F, FA>, ntt: &'a NTT, merkle_prover: &'a MerkleProver, codeword: &'a [P], committed: &'a MerkleProver::Committed, ) -> Result<Self, Error>
Constructs a new folder.
Sourcepub const fn curr_round(&self) -> usize
pub const fn curr_round(&self) -> usize
Number of times execute_fold_round
has been called.
Sourcepub fn current_codeword_len(&self) -> usize
pub fn current_codeword_len(&self) -> usize
The length of the current codeword.
Sourcepub fn execute_fold_round(
&mut self,
allocator: &'b impl ComputeAllocator<F, Hal::DevMem>,
challenge: F,
) -> Result<FoldRoundOutput<VCS::Digest>, Error>
pub fn execute_fold_round( &mut self, allocator: &'b impl ComputeAllocator<F, Hal::DevMem>, challenge: F, ) -> Result<FoldRoundOutput<VCS::Digest>, Error>
Executes the next fold round and returns the folded codeword commitment.
As a memory efficient optimization, this method may not actually do the folding, but instead accumulate the folding challenge for processing at a later time. This saves us from storing intermediate folded codewords.
Sourcepub fn finalize(
self,
) -> Result<(TerminateCodeword<F>, FRIQueryProver<'a, F, FA, P, MerkleProver, VCS>), Error>
pub fn finalize( self, ) -> Result<(TerminateCodeword<F>, FRIQueryProver<'a, F, FA, P, MerkleProver, VCS>), Error>
Finalizes the FRI folding process.
This step will process any unprocessed folding challenges to produce the final folded codeword. Then it will decode this final folded codeword to get the final message. The result is the final message and a query prover instance.
This returns the final message and a query prover instance.
pub fn finish_proof<Challenger_>(
self,
transcript: &mut ProverTranscript<Challenger_>,
) -> Result<(), Error>where
Challenger_: Challenger,
Auto Trait Implementations§
impl<'a, 'b, F, FA, P, NTT, MerkleProver, VCS, Hal> Freeze for FRIFolder<'a, 'b, F, FA, P, NTT, MerkleProver, VCS, Hal>
impl<'a, 'b, F, FA, P, NTT, MerkleProver, VCS, Hal> RefUnwindSafe for FRIFolder<'a, 'b, F, FA, P, NTT, MerkleProver, VCS, Hal>where
<F as WithUnderlier>::Underlier: Sized,
<FA as WithUnderlier>::Underlier: Sized,
NTT: RefUnwindSafe,
MerkleProver: RefUnwindSafe,
<MerkleProver as MerkleTreeProver<F>>::Committed: RefUnwindSafe,
Hal: RefUnwindSafe,
P: RefUnwindSafe,
F: RefUnwindSafe,
<<Hal as ComputeLayer<F>>::DevMem as ComputeMemory<F>>::FSliceMut<'b>: RefUnwindSafe,
FA: RefUnwindSafe,
impl<'a, 'b, F, FA, P, NTT, MerkleProver, VCS, Hal> Send for FRIFolder<'a, 'b, F, FA, P, NTT, MerkleProver, VCS, Hal>where
<F as WithUnderlier>::Underlier: Sized,
<FA as WithUnderlier>::Underlier: Sized,
NTT: Sync,
<MerkleProver as MerkleTreeProver<F>>::Committed: Sync + Send,
Hal: Sync,
impl<'a, 'b, F, FA, P, NTT, MerkleProver, VCS, Hal> Sync for FRIFolder<'a, 'b, F, FA, P, NTT, MerkleProver, VCS, Hal>where
<F as WithUnderlier>::Underlier: Sized,
<FA as WithUnderlier>::Underlier: Sized,
NTT: Sync,
<MerkleProver as MerkleTreeProver<F>>::Committed: Sync,
Hal: Sync,
<<Hal as ComputeLayer<F>>::DevMem as ComputeMemory<F>>::FSliceMut<'b>: Sync,
impl<'a, 'b, F, FA, P, NTT, MerkleProver, VCS, Hal> Unpin for FRIFolder<'a, 'b, F, FA, P, NTT, MerkleProver, VCS, Hal>where
<F as WithUnderlier>::Underlier: Sized,
<FA as WithUnderlier>::Underlier: Sized,
F: Unpin,
<<Hal as ComputeLayer<F>>::DevMem as ComputeMemory<F>>::FSliceMut<'b>: Unpin,
<MerkleProver as MerkleTreeProver<F>>::Committed: Unpin,
impl<'a, 'b, F, FA, P, NTT, MerkleProver, VCS, Hal> UnwindSafe for FRIFolder<'a, 'b, F, FA, P, NTT, MerkleProver, VCS, Hal>where
<F as WithUnderlier>::Underlier: Sized,
<FA as WithUnderlier>::Underlier: Sized,
NTT: RefUnwindSafe,
MerkleProver: RefUnwindSafe,
<MerkleProver as MerkleTreeProver<F>>::Committed: RefUnwindSafe + UnwindSafe,
Hal: RefUnwindSafe,
P: RefUnwindSafe,
F: RefUnwindSafe + UnwindSafe,
<<Hal as ComputeLayer<F>>::DevMem as ComputeMemory<F>>::FSliceMut<'b>: UnwindSafe,
FA: RefUnwindSafe,
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