[−][src]Trait bulletproofs::r1cs::ConstraintSystem
The interface for a constraint system, abstracting over the prover and verifier's roles.
Statements to be proved by an R1CSProof
are specified by
programmatically constructing constraints. These constraints need
to be identical between the prover and verifier, since the prover
and verifier need to construct the same statement.
To prevent code duplication or mismatches between the prover and
verifier, gadgets for the constraint system should be written
using the ConstraintSystem
trait, so that the prover and
verifier share the logic for specifying constraints.
Required methods
fn transcript(&mut self) -> &mut Transcript
Leases the proof transcript to the user, so they can add extra data to which the proof must be bound, but which is not available before creation of the constraint system.
fn multiply(
&mut self,
left: LinearCombination,
right: LinearCombination
) -> (Variable, Variable, Variable)
&mut self,
left: LinearCombination,
right: LinearCombination
) -> (Variable, Variable, Variable)
Allocate and constrain multiplication variables.
Allocate variables left
, right
, and out
with the implicit constraint that
left * right = out
and add the explicit constraints that
left = left_constraint
right = right_constraint
Returns (left, right, out)
for use in further constraints.
fn allocate(
&mut self,
assignment: Option<Scalar>
) -> Result<Variable, R1CSError>
&mut self,
assignment: Option<Scalar>
) -> Result<Variable, R1CSError>
Allocate a single variable.
This either allocates a new multiplier and returns its left
variable,
or returns a right
variable of a multiplier previously allocated by this method.
The output of a multiplier is assigned on a even call, when right
is assigned.
When CS is committed at the end of the first or second phase, the half-assigned multiplier
has the right
assigned to zero and all its variables committed.
Returns unconstrained Variable
for use in further constraints.
fn allocate_multiplier(
&mut self,
input_assignments: Option<(Scalar, Scalar)>
) -> Result<(Variable, Variable, Variable), R1CSError>
&mut self,
input_assignments: Option<(Scalar, Scalar)>
) -> Result<(Variable, Variable, Variable), R1CSError>
Allocate variables left
, right
, and out
with the implicit constraint that
left * right = out
Returns (left, right, out)
for use in further constraints.
fn constrain(&mut self, lc: LinearCombination)
Enforce the explicit constraint that
lc = 0
Implementors
impl<'t> ConstraintSystem for Verifier<'t>
[src]
fn transcript(&mut self) -> &mut Transcript
[src]
fn multiply(
&mut self,
left: LinearCombination,
right: LinearCombination
) -> (Variable, Variable, Variable)
[src]
&mut self,
left: LinearCombination,
right: LinearCombination
) -> (Variable, Variable, Variable)
fn allocate(&mut self, _: Option<Scalar>) -> Result<Variable, R1CSError>
[src]
fn allocate_multiplier(
&mut self,
_: Option<(Scalar, Scalar)>
) -> Result<(Variable, Variable, Variable), R1CSError>
[src]
&mut self,
_: Option<(Scalar, Scalar)>
) -> Result<(Variable, Variable, Variable), R1CSError>
fn constrain(&mut self, lc: LinearCombination)
[src]
impl<'t, 'g> ConstraintSystem for Prover<'t, 'g>
[src]
fn transcript(&mut self) -> &mut Transcript
[src]
fn multiply(
&mut self,
left: LinearCombination,
right: LinearCombination
) -> (Variable, Variable, Variable)
[src]
&mut self,
left: LinearCombination,
right: LinearCombination
) -> (Variable, Variable, Variable)
fn allocate(
&mut self,
assignment: Option<Scalar>
) -> Result<Variable, R1CSError>
[src]
&mut self,
assignment: Option<Scalar>
) -> Result<Variable, R1CSError>
fn allocate_multiplier(
&mut self,
input_assignments: Option<(Scalar, Scalar)>
) -> Result<(Variable, Variable, Variable), R1CSError>
[src]
&mut self,
input_assignments: Option<(Scalar, Scalar)>
) -> Result<(Variable, Variable, Variable), R1CSError>