pub trait Environment: 'static + Copy + Clone + Debug + Display + Eq + PartialEq<Self> + Hash {
    type Network: Network<Affine = Self::Affine, Field = Self::BaseField, Scalar = Self::ScalarField>;
    type Affine: AffineCurve<BaseField = Self::BaseField, ScalarField = Self::ScalarField, Coordinates = (Self::BaseField, Self::BaseField)>;
    type BaseField: PrimeField + SquareRootField + Copy;
    type ScalarField: PrimeField<BigInteger = <Self::BaseField as PrimeField>::BigInteger> + Copy;

    const EDWARDS_A: Self::BaseField = <Self::Network as console::Environment>::EDWARDS_A;
    const EDWARDS_D: Self::BaseField = <Self::Network as console::Environment>::EDWARDS_D;
    const MONTGOMERY_A: Self::BaseField = <Self::Network as console::Environment>::MONTGOMERY_A;
    const MONTGOMERY_B: Self::BaseField = <Self::Network as console::Environment>::MONTGOMERY_B;
    const MAX_STRING_BYTES: u32 = <Self::Network as console::Environment>::MAX_STRING_BYTES;
Show 28 methods // Required methods fn zero() -> LinearCombination<Self::BaseField>; fn one() -> LinearCombination<Self::BaseField>; fn new_variable( mode: Mode, value: Self::BaseField ) -> Variable<Self::BaseField>; fn new_witness<Fn, Output>(mode: Mode, value: Fn) -> Output where Fn: FnOnce() -> <Output as Inject>::Primitive, Output: Inject; fn scope<S, Fn, Output>(name: S, logic: Fn) -> Output where S: Into<String>, Fn: FnOnce() -> Output; fn enforce<Fn, A, B, C>(constraint: Fn) where Fn: FnOnce() -> (A, B, C), A: Into<LinearCombination<Self::BaseField>>, B: Into<LinearCombination<Self::BaseField>>, C: Into<LinearCombination<Self::BaseField>>; fn is_satisfied() -> bool; fn is_satisfied_in_scope() -> bool; fn num_constants() -> u64; fn num_public() -> u64; fn num_private() -> u64; fn num_constraints() -> u64; fn num_nonzeros() -> (u64, u64, u64); fn num_constants_in_scope() -> u64; fn num_public_in_scope() -> u64; fn num_private_in_scope() -> u64; fn num_constraints_in_scope() -> u64; fn num_nonzeros_in_scope() -> (u64, u64, u64); fn inject_r1cs(r1cs: R1CS<Self::BaseField>); fn eject_r1cs_and_reset() -> R1CS<Self::BaseField>; fn eject_assignment_and_reset( ) -> Assignment<<Self::Network as Environment>::Field>; fn reset(); // Provided methods fn assert<Boolean>(boolean: Boolean) where Boolean: Into<LinearCombination<Self::BaseField>> { ... } fn assert_eq<A, B>(a: A, b: B) where A: Into<LinearCombination<Self::BaseField>>, B: Into<LinearCombination<Self::BaseField>> { ... } fn assert_neq<A, B>(a: A, b: B) where A: Into<LinearCombination<Self::BaseField>>, B: Into<LinearCombination<Self::BaseField>> { ... } fn count() -> (u64, u64, u64, u64, (u64, u64, u64)) { ... } fn count_in_scope() -> (u64, u64, u64, u64, (u64, u64, u64)) { ... } fn halt<S, T>(message: S) -> T where S: Into<String> { ... }
}

Required Associated Types§

source

type Network: Network<Affine = Self::Affine, Field = Self::BaseField, Scalar = Self::ScalarField>

source

type Affine: AffineCurve<BaseField = Self::BaseField, ScalarField = Self::ScalarField, Coordinates = (Self::BaseField, Self::BaseField)>

source

type BaseField: PrimeField + SquareRootField + Copy

source

type ScalarField: PrimeField<BigInteger = <Self::BaseField as PrimeField>::BigInteger> + Copy

Provided Associated Constants§

source

const EDWARDS_A: Self::BaseField = <Self::Network as console::Environment>::EDWARDS_A

The coefficient A of the twisted Edwards curve.

source

const EDWARDS_D: Self::BaseField = <Self::Network as console::Environment>::EDWARDS_D

The coefficient D of the twisted Edwards curve.

source

const MONTGOMERY_A: Self::BaseField = <Self::Network as console::Environment>::MONTGOMERY_A

The coefficient A of the Montgomery curve.

source

const MONTGOMERY_B: Self::BaseField = <Self::Network as console::Environment>::MONTGOMERY_B

The coefficient B of the Montgomery curve.

source

const MAX_STRING_BYTES: u32 = <Self::Network as console::Environment>::MAX_STRING_BYTES

The maximum number of bytes allowed in a string.

Required Methods§

source

fn zero() -> LinearCombination<Self::BaseField>

Returns the zero constant.

source

fn one() -> LinearCombination<Self::BaseField>

Returns the one constant.

source

fn new_variable(mode: Mode, value: Self::BaseField) -> Variable<Self::BaseField>

Returns a new variable of the given mode and value.

source

fn new_witness<Fn, Output>(mode: Mode, value: Fn) -> Outputwhere Fn: FnOnce() -> <Output as Inject>::Primitive, Output: Inject,

Returns a new witness of the given mode and value.

source

fn scope<S, Fn, Output>(name: S, logic: Fn) -> Outputwhere S: Into<String>, Fn: FnOnce() -> Output,

Enters a new scope for the environment.

source

fn enforce<Fn, A, B, C>(constraint: Fn)where Fn: FnOnce() -> (A, B, C), A: Into<LinearCombination<Self::BaseField>>, B: Into<LinearCombination<Self::BaseField>>, C: Into<LinearCombination<Self::BaseField>>,

Adds one constraint enforcing that (A * B) == C.

source

fn is_satisfied() -> bool

Returns true if all constraints in the environment are satisfied.

source

fn is_satisfied_in_scope() -> bool

Returns true if all constraints in the current scope are satisfied.

source

fn num_constants() -> u64

Returns the number of constants in the entire environment.

source

fn num_public() -> u64

Returns the number of public variables in the entire environment.

source

fn num_private() -> u64

Returns the number of private variables in the entire environment.

source

fn num_constraints() -> u64

Returns the number of constraints in the entire environment.

source

fn num_nonzeros() -> (u64, u64, u64)

Returns the number of nonzeros in the entire circuit.

source

fn num_constants_in_scope() -> u64

Returns the number of constants for the current scope.

source

fn num_public_in_scope() -> u64

Returns the number of public variables for the current scope.

source

fn num_private_in_scope() -> u64

Returns the number of private variables for the current scope.

source

fn num_constraints_in_scope() -> u64

Returns the number of constraints for the current scope.

source

fn num_nonzeros_in_scope() -> (u64, u64, u64)

Returns the number of nonzeros for the current scope.

source

fn inject_r1cs(r1cs: R1CS<Self::BaseField>)

Returns the R1CS circuit, resetting the circuit.

source

fn eject_r1cs_and_reset() -> R1CS<Self::BaseField>

Returns the R1CS circuit, resetting the circuit.

source

fn eject_assignment_and_reset( ) -> Assignment<<Self::Network as Environment>::Field>

Returns the R1CS assignment of the circuit, resetting the circuit.

source

fn reset()

Clears and initializes an empty environment.

Provided Methods§

source

fn assert<Boolean>(boolean: Boolean)where Boolean: Into<LinearCombination<Self::BaseField>>,

Adds one constraint enforcing that the given boolean is true.

source

fn assert_eq<A, B>(a: A, b: B)where A: Into<LinearCombination<Self::BaseField>>, B: Into<LinearCombination<Self::BaseField>>,

Adds one constraint enforcing that the A == B.

source

fn assert_neq<A, B>(a: A, b: B)where A: Into<LinearCombination<Self::BaseField>>, B: Into<LinearCombination<Self::BaseField>>,

Adds one constraint enforcing that the A != B.

source

fn count() -> (u64, u64, u64, u64, (u64, u64, u64))

Returns a tuple containing the number of constants, public variables, private variables, constraints, and nonzeros in the entire environment.

source

fn count_in_scope() -> (u64, u64, u64, u64, (u64, u64, u64))

Returns a tuple containing the number of constants, public variables, private variables, constraints, and nonzeros for the current scope.

source

fn halt<S, T>(message: S) -> Twhere S: Into<String>,

Halts the program from further synthesis, evaluation, and execution in the current environment.

Implementors§

source§

impl Environment for AleoV0

source§

impl Environment for Circuit

§

type Affine = <Testnet3 as Environment>::Affine

§

type BaseField = <Testnet3 as Environment>::Field

§

type Network = Testnet3

§

type ScalarField = <Testnet3 as Environment>::Scalar