pub struct FriParameters {
pub log_blowup: usize,
pub log_final_poly_len: usize,
pub num_queries: usize,
pub query_proof_of_work_bits: usize,
pub commit_proof_of_work_bits: usize,
}Fields§
§log_blowup: usize§log_final_poly_len: usize§num_queries: usize§query_proof_of_work_bits: usize§commit_proof_of_work_bits: usizeImplementations§
Source§impl FriParameters
impl FriParameters
Sourcepub fn get_conjectured_security_bits(
&self,
challenge_field_bits: usize,
) -> usize
pub fn get_conjectured_security_bits( &self, challenge_field_bits: usize, ) -> usize
Conjectured bits of security. See ethSTARK paper (https://eprint.iacr.org/2021/582.pdf) section 5.10.1 equation (19)
challenge_field_bits is the number of bits in the challenge field (extension field) of the
STARK config.
Sourcepub fn standard_fast() -> Self
pub fn standard_fast() -> Self
pub fn standard_with_100_bits_conjectured_security(log_blowup: usize) -> Self
Sourcepub fn standard_with_100_bits_security(log_blowup: usize) -> Self
pub fn standard_with_100_bits_security(log_blowup: usize) -> Self
pub fn max_constraint_degree(&self) -> usize
Sourcepub fn new_for_testing(log_blowup: usize) -> Self
pub fn new_for_testing(log_blowup: usize) -> Self
New FRI parameters for testing usage with the specific log_blowup.
If the environment variable OPENVM_FAST_TEST is set to “1”, then the parameters are not
secure and meant for fast testing only.
In production, use Self::standard_with_100_bits_security instead.
Sourcepub fn security_bits_fri(
&self,
challenge_field_bits: f64,
num_batch_columns: usize,
max_log_domain_size: usize,
) -> f64
pub fn security_bits_fri( &self, challenge_field_bits: f64, num_batch_columns: usize, max_log_domain_size: usize, ) -> f64
We (via Plonky3) use multi-FRI, whose security in the unique decoding regime can be bounded above by the security of batch FRI by considering all polynomials in the largest domain.
Following https://eprint.iacr.org/2023/1071.pdf, https://eprint.iacr.org/2025/1993.pdf, we use round-by-round soundness since we use FRI as a non-interactive protocol via Fiat-Shamir.
We use multi-FRI with <=2 opening points (the second point for rotation openings). The
num_batch_columns is the maximum number of columns to be batched for any fixed domain
size. A trace polynomial over the base field opened at 2 points gets a contribution of
2. A trace polynomial over the extension field opened at 2 points gets a contribution of
8.
Sourcepub fn security_bits_fri_commit_phase(
&self,
challenge_field_bits: f64,
num_batch_columns: usize,
max_log_domain_size: usize,
) -> f64
pub fn security_bits_fri_commit_phase( &self, challenge_field_bits: f64, num_batch_columns: usize, max_log_domain_size: usize, ) -> f64
Batch FRI error according to https://eprint.iacr.org/2022/1216.pdf in the unique decoding regime. The batch FRI bound is an overestimate because in multi-FRI the error contribution for batching over smaller domain sizes is smaller.
We assume arity-2 folding.
pub fn security_bits_fri_query_phase(&self) -> f64
Sourcepub fn security_bits_deep_ali(
&self,
params: &DeepAliParameters,
challenge_field_bits: f64,
max_log_domain_size: usize,
max_constraint_degree: usize,
max_num_constraints: usize,
) -> f64
pub fn security_bits_deep_ali( &self, params: &DeepAliParameters, challenge_field_bits: f64, max_log_domain_size: usize, max_constraint_degree: usize, max_num_constraints: usize, ) -> f64
The bits of security from DEEP-ALI.
Note that unlike in Theorem 8 of https://eprint.iacr.org/2022/1216.pdf, we do not include the rotation in the denominator of the quotient polynomial. Instead the quotient polynomial denominator consists only of Z_H(X) = X^{trace_height} - 1. The rotation opening point is handled as part of FRI PCS opening as an additional opening point. This means that for us k^+ = k + 1. We also include degree of selectors within the max_constraint_degree parameter.
Trait Implementations§
Source§impl Clone for FriParameters
impl Clone for FriParameters
Source§fn clone(&self) -> FriParameters
fn clone(&self) -> FriParameters
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for FriParameters
impl Debug for FriParameters
Source§impl<'de> Deserialize<'de> for FriParameters
impl<'de> Deserialize<'de> for FriParameters
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>,
Source§impl PartialEq for FriParameters
impl PartialEq for FriParameters
Source§impl Serialize for FriParameters
impl Serialize for FriParameters
impl Copy for FriParameters
impl Eq for FriParameters
impl StructuralPartialEq for FriParameters
Auto Trait Implementations§
impl Freeze for FriParameters
impl RefUnwindSafe for FriParameters
impl Send for FriParameters
impl Sync for FriParameters
impl Unpin for FriParameters
impl UnwindSafe for FriParameters
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,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.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 moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.