pub struct MultiPhaseCoreManager<F: ScalarField> {
pub phase_manager: Vec<SinglePhaseCoreManager<F>>,
pub copy_manager: SharedCopyConstraintManager<F>,
/* private fields */
}
Expand description
Virtual region manager for FlexGateConfig
in multiple phases.
Fields§
§phase_manager: Vec<SinglePhaseCoreManager<F>>
Virtual region for each challenge phase. These cannot be shared across threads while keeping circuit deterministic.
copy_manager: SharedCopyConstraintManager<F>
Global shared copy manager
Implementations§
Source§impl<F: ScalarField> MultiPhaseCoreManager<F>
impl<F: ScalarField> MultiPhaseCoreManager<F>
Sourcepub fn witness_gen_only(&self) -> bool
pub fn witness_gen_only(&self) -> bool
Flag for witness generation. If true, the gate thread builder is used for witness generation only.
Sourcepub fn use_unknown(&self) -> bool
pub fn use_unknown(&self) -> bool
The unknown
flag is used during key generation. If true, during key generation witness Value
s are replaced with Value::unknown()
for safety.
Source§impl<F: ScalarField> MultiPhaseCoreManager<F>
impl<F: ScalarField> MultiPhaseCoreManager<F>
Sourcepub fn new(witness_gen_only: bool) -> Self
pub fn new(witness_gen_only: bool) -> Self
Creates a new MultiPhaseCoreManager with a default SinglePhaseCoreManager in phase 0.
Creates an empty SharedCopyConstraintManager and sets witness_gen_only
flag.
witness_gen_only
: If true, the MultiPhaseCoreManager is used for witness generation only.- If true, the gate thread builder only does witness asignments and does not store constraint information – this should only be used for the real prover.
- If false, the gate thread builder is used for keygen and mock prover (it can also be used for real prover) and the builder stores circuit information (e.g. copy constraints, fixed columns, enabled selectors).
- These values are fixed for the circuit at key generation time, and they do not need to be re-computed by the prover in the actual proving phase.
Sourcepub fn from_stage(stage: CircuitBuilderStage) -> Self
pub fn from_stage(stage: CircuitBuilderStage) -> Self
Creates a new MultiPhaseCoreManager depending on the stage of circuit building. If the stage is CircuitBuilderStage::Prover, the MultiPhaseCoreManager is used for witness generation only.
Sourcepub fn set_copy_manager(&mut self, copy_manager: SharedCopyConstraintManager<F>)
pub fn set_copy_manager(&mut self, copy_manager: SharedCopyConstraintManager<F>)
Mutates self
to use the given copy manager in all phases and all threads.
Sourcepub fn use_copy_manager(
self,
copy_manager: SharedCopyConstraintManager<F>,
) -> Self
pub fn use_copy_manager( self, copy_manager: SharedCopyConstraintManager<F>, ) -> Self
Returns self
with a given copy manager
Sourcepub fn unknown(self, use_unknown: bool) -> Self
pub fn unknown(self, use_unknown: bool) -> Self
Creates a new MultiPhaseCoreManager with use_unknown
flag set.
use_unknown
: If true, during key generation witness values are replaced withValue::unknown()
for safety.
Sourcepub fn main(&mut self, phase: usize) -> &mut Context<F>
pub fn main(&mut self, phase: usize) -> &mut Context<F>
Returns a mutable reference to the Context of a gate thread. Spawns a new thread for the given phase, if none exists.
phase
: The challenge phase (as an index) of the gate thread.
Sourcepub fn new_thread(&mut self, phase: usize) -> &mut Context<F>
pub fn new_thread(&mut self, phase: usize) -> &mut Context<F>
Spawns a new thread for a new given phase
. Returns a mutable reference to the Context of the new thread.
phase
: The phase (index) of the gate thread.
Sourcepub fn in_phase(&mut self, phase: usize) -> &mut SinglePhaseCoreManager<F>
pub fn in_phase(&mut self, phase: usize) -> &mut SinglePhaseCoreManager<F>
Returns a mutable reference to the SinglePhaseCoreManager of a given phase
.
Sourcepub fn statistics(&self) -> GateStatistics
pub fn statistics(&self) -> GateStatistics
Returns some statistics about the virtual region.
Sourcepub fn calculate_params(
&self,
k: usize,
minimum_rows: Option<usize>,
) -> FlexGateConfigParams
pub fn calculate_params( &self, k: usize, minimum_rows: Option<usize>, ) -> FlexGateConfigParams
Auto-calculates configuration parameters for the circuit
k
: The number of in the circuit (i.e. numeber of rows = 2k)minimum_rows
: The minimum number of rows in the circuit that cannot be used for witness assignments and contain randomblinding factors
to ensure zk property, defaults to 0.
Trait Implementations§
Source§impl<F: Clone + ScalarField> Clone for MultiPhaseCoreManager<F>
impl<F: Clone + ScalarField> Clone for MultiPhaseCoreManager<F>
Source§fn clone(&self) -> MultiPhaseCoreManager<F>
fn clone(&self) -> MultiPhaseCoreManager<F>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl<F: Debug + ScalarField> Debug for MultiPhaseCoreManager<F>
impl<F: Debug + ScalarField> Debug for MultiPhaseCoreManager<F>
Source§impl<F: Default + ScalarField> Default for MultiPhaseCoreManager<F>
impl<F: Default + ScalarField> Default for MultiPhaseCoreManager<F>
Source§fn default() -> MultiPhaseCoreManager<F>
fn default() -> MultiPhaseCoreManager<F>
Auto Trait Implementations§
impl<F> Freeze for MultiPhaseCoreManager<F>
impl<F> !RefUnwindSafe for MultiPhaseCoreManager<F>
impl<F> Send for MultiPhaseCoreManager<F>
impl<F> !Sync for MultiPhaseCoreManager<F>
impl<F> Unpin for MultiPhaseCoreManager<F>where
F: Unpin,
impl<F> UnwindSafe for MultiPhaseCoreManager<F>where
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)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.