Struct darkfi::zk::halo2::plonk::ConstraintSystem
pub struct ConstraintSystem<F>where
F: Field,{Show 14 fields
pub(crate) num_fixed_columns: usize,
pub(crate) num_advice_columns: usize,
pub(crate) num_instance_columns: usize,
pub(crate) num_selectors: usize,
pub(crate) selector_map: Vec<Column<Fixed>>,
pub(crate) gates: Vec<Gate<F>>,
pub(crate) advice_queries: Vec<(Column<Advice>, Rotation)>,
num_advice_queries: Vec<usize>,
pub(crate) instance_queries: Vec<(Column<Instance>, Rotation)>,
pub(crate) fixed_queries: Vec<(Column<Fixed>, Rotation)>,
pub(crate) permutation: Argument,
pub(crate) lookups: Vec<Argument<F>>,
pub(crate) constants: Vec<Column<Fixed>>,
pub(crate) minimum_degree: Option<usize>,
}
Expand description
This is a description of the circuit environment, such as the gate, column and permutation arrangements.
Fields§
§num_fixed_columns: usize
§num_advice_columns: usize
§num_instance_columns: usize
§num_selectors: usize
§selector_map: Vec<Column<Fixed>>
§gates: Vec<Gate<F>>
§advice_queries: Vec<(Column<Advice>, Rotation)>
§num_advice_queries: Vec<usize>
§instance_queries: Vec<(Column<Instance>, Rotation)>
§fixed_queries: Vec<(Column<Fixed>, Rotation)>
§permutation: Argument
§lookups: Vec<Argument<F>>
§constants: Vec<Column<Fixed>>
§minimum_degree: Option<usize>
Implementations§
§impl<F> ConstraintSystem<F>where
F: Field,
impl<F> ConstraintSystem<F>where
F: Field,
pub fn pinned(&self) -> PinnedConstraintSystem<'_, F>
pub fn pinned(&self) -> PinnedConstraintSystem<'_, F>
Obtain a pinned version of this constraint system; a structure with the minimal parameters needed to determine the rest of the constraint system.
pub fn enable_constant(&mut self, column: Column<Fixed>)
pub fn enable_constant(&mut self, column: Column<Fixed>)
Enables this fixed column to be used for global constant assignments.
§Side-effects
The column will be equality-enabled.
pub fn enable_equality<C>(&mut self, column: C)
pub fn enable_equality<C>(&mut self, column: C)
Enable the ability to enforce equality over cells in this column
pub fn lookup(
&mut self,
table_map: impl FnOnce(&mut VirtualCells<'_, F>) -> Vec<(Expression<F>, TableColumn)>,
) -> usize
pub fn lookup( &mut self, table_map: impl FnOnce(&mut VirtualCells<'_, F>) -> Vec<(Expression<F>, TableColumn)>, ) -> usize
Add a lookup argument for some input expressions and table columns.
table_map
returns a map between input expressions and the table columns
they need to match.
pub fn set_minimum_degree(&mut self, degree: usize)
pub fn set_minimum_degree(&mut self, degree: usize)
Sets the minimum degree required by the circuit, which can be set to a larger amount than actually needed. This can be used, for example, to force the permutation argument to involve more columns in the same set.
pub fn create_gate<C, Iter>(
&mut self,
name: &'static str,
constraints: impl FnOnce(&mut VirtualCells<'_, F>) -> Iter,
)
pub fn create_gate<C, Iter>( &mut self, name: &'static str, constraints: impl FnOnce(&mut VirtualCells<'_, F>) -> Iter, )
Creates a new gate.
§Panics
A gate is required to contain polynomial constraints. This method will panic if
constraints
returns an empty iterator.
pub fn selector(&mut self) -> Selector
pub fn selector(&mut self) -> Selector
Allocate a new (simple) selector. Simple selectors cannot be added to expressions nor multiplied by other expressions containing simple selectors. Also, simple selectors may not appear in lookup argument inputs.
pub fn complex_selector(&mut self) -> Selector
pub fn complex_selector(&mut self) -> Selector
Allocate a new complex selector that can appear anywhere within expressions.
pub fn lookup_table_column(&mut self) -> TableColumn
pub fn lookup_table_column(&mut self) -> TableColumn
Allocates a new fixed column that can be used in a lookup table.
pub fn fixed_column(&mut self) -> Column<Fixed>
pub fn fixed_column(&mut self) -> Column<Fixed>
Allocate a new fixed column
pub fn advice_column(&mut self) -> Column<Advice>
pub fn advice_column(&mut self) -> Column<Advice>
Allocate a new advice column
pub fn instance_column(&mut self) -> Column<Instance>
pub fn instance_column(&mut self) -> Column<Instance>
Allocate a new instance column
pub fn degree(&self) -> usize
pub fn degree(&self) -> usize
Compute the degree of the constraint system (the maximum degree of all constraints).
pub fn blinding_factors(&self) -> usize
pub fn blinding_factors(&self) -> usize
Compute the number of blinding factors necessary to perfectly blind each of the prover’s witness polynomials.
pub fn minimum_rows(&self) -> usize
pub fn minimum_rows(&self) -> usize
Returns the minimum necessary rows that need to exist in order to account for e.g. blinding factors.
pub fn get_num_fixed_columns(&self) -> usize
pub fn get_num_fixed_columns(&self) -> usize
Return self.num_fixed_columns
pub fn get_num_advice_columns(&self) -> usize
pub fn get_num_advice_columns(&self) -> usize
Return self.num_advice_columns
pub fn get_num_instance_columns(&self) -> usize
pub fn get_num_instance_columns(&self) -> usize
Return self.num_instance_columns
pub fn get_num_selectors(&self) -> usize
pub fn get_num_selectors(&self) -> usize
Return self.num_selectors
pub fn get_selector_map(&self) -> &[Column<Fixed>]
pub fn get_selector_map(&self) -> &[Column<Fixed>]
Return self.selector_map
pub fn get_advice_queries(&self) -> &[(Column<Advice>, Rotation)]
pub fn get_advice_queries(&self) -> &[(Column<Advice>, Rotation)]
Return self.advice_queries
pub fn get_num_advice_queries(&self) -> &[usize]
pub fn get_num_advice_queries(&self) -> &[usize]
Return self.num_advice_queries
pub fn get_instance_queries(&self) -> &[(Column<Instance>, Rotation)]
pub fn get_instance_queries(&self) -> &[(Column<Instance>, Rotation)]
Return self.instance_queries
pub fn get_fixed_queries(&self) -> &[(Column<Fixed>, Rotation)]
pub fn get_fixed_queries(&self) -> &[(Column<Fixed>, Rotation)]
Return self.fixed_queries
pub fn get_permutation(&self) -> &Argument
pub fn get_permutation(&self) -> &Argument
Return self.permutation
pub fn get_lookups(&self) -> &[Argument<F>]
pub fn get_lookups(&self) -> &[Argument<F>]
Return self.lookups
pub fn get_constants(&self) -> &[Column<Fixed>]
pub fn get_constants(&self) -> &[Column<Fixed>]
Return self.constants
pub fn get_minimum_degree(&self) -> &Option<usize>
pub fn get_minimum_degree(&self) -> &Option<usize>
Return self.minimum_degree
Trait Implementations§
§impl<F> Clone for ConstraintSystem<F>
impl<F> Clone for ConstraintSystem<F>
§fn clone(&self) -> ConstraintSystem<F>
fn clone(&self) -> ConstraintSystem<F>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more§impl<F> Debug for ConstraintSystem<F>
impl<F> Debug for ConstraintSystem<F>
§impl<F> Default for ConstraintSystem<F>where
F: Field,
impl<F> Default for ConstraintSystem<F>where
F: Field,
§fn default() -> ConstraintSystem<F>
fn default() -> ConstraintSystem<F>
Auto Trait Implementations§
impl<F> Freeze for ConstraintSystem<F>
impl<F> RefUnwindSafe for ConstraintSystem<F>where
F: RefUnwindSafe,
impl<F> Send for ConstraintSystem<F>
impl<F> Sync for ConstraintSystem<F>
impl<F> Unpin for ConstraintSystem<F>where
F: Unpin,
impl<F> UnwindSafe for ConstraintSystem<F>where
F: UnwindSafe,
Blanket Implementations§
§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
type ArchivedMetadata = ()
§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§impl<T> Conv for T
impl<T> Conv for T
§impl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
§fn deserialize(
&self,
deserializer: &mut D,
) -> Result<With<T, W>, <D as Fallible>::Error>
fn deserialize( &self, deserializer: &mut D, ) -> Result<With<T, W>, <D as Fallible>::Error>
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync 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> LayoutRaw for T
impl<T> LayoutRaw for T
§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
§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.