pub trait Circuit<F: Field> {
type Config: Clone;
type FloorPlanner: FloorPlanner;
type Params: Default = ();
// Required methods
fn without_witnesses(&self) -> Self;
fn configure(meta: &mut ConstraintSystem<F>) -> Self::Config;
fn synthesize(
&self,
config: Self::Config,
layouter: impl Layouter<F>,
) -> Result<(), Error>;
// Provided methods
fn params(&self) -> Self::Params { ... }
fn configure_with_params(
meta: &mut ConstraintSystem<F>,
_params: Self::Params,
) -> Self::Config { ... }
}
Expand description
This is a trait that circuits provide implementations for so that the
backend prover can ask the circuit to synthesize using some given
ConstraintSystem
implementation.
Required Associated Types§
Sourcetype FloorPlanner: FloorPlanner
type FloorPlanner: FloorPlanner
The floor planner used for this circuit. This is an associated type of the
Circuit
trait because its behaviour is circuit-critical.
Provided Associated Types§
Required Methods§
Sourcefn without_witnesses(&self) -> Self
fn without_witnesses(&self) -> Self
Returns a copy of this circuit with no witness values (i.e. all witnesses set to
None
). For most circuits, this will be equal to Self::default()
.
Sourcefn configure(meta: &mut ConstraintSystem<F>) -> Self::Config
fn configure(meta: &mut ConstraintSystem<F>) -> Self::Config
The circuit is given an opportunity to describe the exact gate arrangement, column arrangement, etc.
Provided Methods§
Sourcefn params(&self) -> Self::Params
fn params(&self) -> Self::Params
Returns a reference to the parameters that should be used to configure the circuit.
Requires the circuit-params
feature.
Sourcefn configure_with_params(
meta: &mut ConstraintSystem<F>,
_params: Self::Params,
) -> Self::Config
fn configure_with_params( meta: &mut ConstraintSystem<F>, _params: Self::Params, ) -> Self::Config
The circuit is given an opportunity to describe the exact gate
arrangement, column arrangement, etc. Takes a runtime parameter. The default
implementation calls configure
ignoring the _params
argument in order to easily support
circuits that don’t use configuration parameters.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.