pub struct GKRCircuitProverConfig {
lazy_beta_evals: bool,
circuit_description_hash_type: CircuitHashType,
claim_agg_strategy: ClaimAggregationStrategy,
claim_agg_constant_column_optimization: bool,
hyrax_input_layer_batch_opening: bool,
enable_bit_packing: bool,
}Expand description
A config which informs a GKR circuit prover about how to prove a GKR circuit,
including flags e.g. whether to use certain optimizations (e.g. Evaluations
memory-efficient optimization), or e.g. which claim aggregation strategy to use.
Fields§
§lazy_beta_evals: boolWhether to evaluate the beta function within gate layers lazily, i.e. to compute the values on the fly rather than via initializing a beta evaluations “table”.
circuit_description_hash_type: CircuitHashTypeThe type of hash function to be used on hashing the circuit description to be added to transcript.
claim_agg_strategy: ClaimAggregationStrategyWhich claim aggregation (RLC vs. deterministic) to use for reducing the validity of multiple claims on a layer to that of a single claim.
claim_agg_constant_column_optimization: boolWhether to use the “constant column optimization”, i.e. whether to reduce the implicit degree of the prover-claimed polynomial Q(x) =? V_i(l(x)) when there are variable indices within all claims where all challenges within that index are identical.
hyrax_input_layer_batch_opening: boolHyrax input layer batch opening. Determines whether we attempt to aggregate Hyrax PCS Evaluation proofs by grouping common challenge coordinates together.
enable_bit_packing: boolControls whether bit-packing is actually enabled. If set to false, the
BitPackedVector will default to storing each field element using the type
F, effectively behaving like a regular (immutable) Vec<F>. This is
needed because bit-packing incurs a noticable runtime slowdown, and we need
an easy way to turn it off if trading memory for speed is desirable.
Note that because this is global, this option also implicitly affects
the verifier’s Evaluations<F> structs!!!
Implementations§
Source§impl GKRCircuitProverConfig
impl GKRCircuitProverConfig
Sourcepub fn matches_global_prover_config(
&self,
prover_verifier_config_instance: &RwLockReadGuard<'_, (GKRCircuitProverConfig, GKRCircuitVerifierConfig)>,
) -> bool
pub fn matches_global_prover_config( &self, prover_verifier_config_instance: &RwLockReadGuard<'_, (GKRCircuitProverConfig, GKRCircuitVerifierConfig)>, ) -> bool
Returns whether the calling GKRCircuitProverConfig, i.e. the “expected” config, matches the one which is currently configured globally. A match implies that we are ready to start proving.
Note that the prover_verifier_config_instance should be held for
the ENTIRE DURATION of proving (and verifying) to prevent any changes
from happening to the config in the middle of proving!
Source§impl GKRCircuitProverConfig
impl GKRCircuitProverConfig
Sourcepub fn memory_optimized_default() -> Self
pub fn memory_optimized_default() -> Self
Returns a memory-optimal configuration for the GKR circuit prover.
In particular, this turns on the lazy_beta_evals and bit_packed_vector
flags.
Sourcepub fn runtime_optimized_default() -> Self
pub fn runtime_optimized_default() -> Self
Returns a runtime-optimal configuration for the GKR circuit prover.
Sourcepub const fn hyrax_compatible_runtime_optimized_default() -> Self
pub const fn hyrax_compatible_runtime_optimized_default() -> Self
Returns a runtime-optimal configuration for a version of the GKR circuit prover which is compatible with our current Hyrax IP implementation.
In particular, this turns OFF the enable_bit_packing option, turns OFF
the lazy_beta_evals option, and additionally turns OFF the
claim_agg_constant_column_optimization option as well.
Sourcepub const fn hyrax_compatible_memory_optimized_default() -> Self
pub const fn hyrax_compatible_memory_optimized_default() -> Self
Returns a memory-optimal configuration for a version of the GKR circuit prover which is compatible with our current Hyrax IP implementation.
In particular, this turns ON the enable_bit_packing option, turns ON
the lazy_beta_evals, and additionally turns OFF the
claim_agg_constant_column_optimization option as well.
Sourcepub fn new(
lazy_beta_evals: bool,
circuit_description_hash_type: CircuitHashType,
claim_agg_strategy: ClaimAggregationStrategy,
claim_agg_constant_column_optimization: bool,
hyrax_input_layer_batch_opening: bool,
enable_bit_packing: bool,
) -> Self
pub fn new( lazy_beta_evals: bool, circuit_description_hash_type: CircuitHashType, claim_agg_strategy: ClaimAggregationStrategy, claim_agg_constant_column_optimization: bool, hyrax_input_layer_batch_opening: bool, enable_bit_packing: bool, ) -> Self
Constructs a new GKRCircuitProverConfig from scratch.
Sourcepub fn set_lazy_beta_evals(&mut self, updated_lazy_beta_evals: bool)
pub fn set_lazy_beta_evals(&mut self, updated_lazy_beta_evals: bool)
Setter function for lazy beta evals.
Sourcepub fn set_claim_agg_strategy(
&mut self,
updated_claim_agg_strategy: ClaimAggregationStrategy,
)
pub fn set_claim_agg_strategy( &mut self, updated_claim_agg_strategy: ClaimAggregationStrategy, )
Setter function for claim agg strategy.
Sourcepub fn set_circuit_description_hash_type(
&mut self,
updated_circuit_description_hash_type: CircuitHashType,
)
pub fn set_circuit_description_hash_type( &mut self, updated_circuit_description_hash_type: CircuitHashType, )
Setter function for circuit hash type.
Sourcepub fn set_claim_agg_constant_column_optimization(
&mut self,
updated_claim_agg_constant_column_optimization: bool,
)
pub fn set_claim_agg_constant_column_optimization( &mut self, updated_claim_agg_constant_column_optimization: bool, )
Setter function for constant column optimization.
Sourcepub fn set_enable_bit_packing(&mut self, updated_enable_bit_packing: bool)
pub fn set_enable_bit_packing(&mut self, updated_enable_bit_packing: bool)
Setter function for enabling bit packing.
Sourcepub fn get_lazy_beta_evals(&self) -> bool
pub fn get_lazy_beta_evals(&self) -> bool
Getter function for lazy beta evals.
Sourcepub fn get_claim_agg_strategy(&self) -> ClaimAggregationStrategy
pub fn get_claim_agg_strategy(&self) -> ClaimAggregationStrategy
Getter function for claim agg strategy.
Sourcepub fn get_circuit_description_hash_type(&self) -> CircuitHashType
pub fn get_circuit_description_hash_type(&self) -> CircuitHashType
Getter function for circuit hash type.
Sourcepub fn get_claim_agg_constant_column_optimization(&self) -> bool
pub fn get_claim_agg_constant_column_optimization(&self) -> bool
Getter function for constant column optimization.
Sourcepub fn get_hyrax_batch_opening(&self) -> bool
pub fn get_hyrax_batch_opening(&self) -> bool
Getter function for Hyrax batch opening.
Sourcepub fn get_enable_bit_packing(&self) -> bool
pub fn get_enable_bit_packing(&self) -> bool
Getter function for enabling bit packing.
Trait Implementations§
Source§impl Clone for GKRCircuitProverConfig
impl Clone for GKRCircuitProverConfig
Source§fn clone(&self) -> GKRCircuitProverConfig
fn clone(&self) -> GKRCircuitProverConfig
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for GKRCircuitProverConfig
impl Debug for GKRCircuitProverConfig
Source§impl<'de> Deserialize<'de> for GKRCircuitProverConfig
impl<'de> Deserialize<'de> for GKRCircuitProverConfig
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 Freeze for GKRCircuitProverConfig
impl RefUnwindSafe for GKRCircuitProverConfig
impl Send for GKRCircuitProverConfig
impl Sync for GKRCircuitProverConfig
impl Unpin for GKRCircuitProverConfig
impl UnwindSafe for GKRCircuitProverConfig
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> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§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.§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.§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.§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.§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.§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.§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.§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.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§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>
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§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§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 more§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 more§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
§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
§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.§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.§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.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Tap for T
impl<T> Tap for T
§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 more§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 more§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 more§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 more§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 more§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 more§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.§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.§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.§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.§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.§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.§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.