Struct Circuit

Source
pub struct Circuit<F: AcirField> {
    pub function_name: String,
    pub current_witness_index: u32,
    pub opcodes: Vec<Opcode<F>>,
    pub private_parameters: BTreeSet<Witness>,
    pub public_parameters: PublicInputs,
    pub return_values: PublicInputs,
    pub assert_messages: Vec<(OpcodeLocation, AssertionPayload<F>)>,
}
Expand description

Representation of a single ACIR circuit. The execution trace of this structure is dictated by the construction of a crate::native_types::WitnessMap

Fields§

§function_name: String

Name of the function represented by this circuit.

§current_witness_index: u32

The current highest witness index in the circuit.

This is tracked as an optimization so that when new witness values are created, incrementing this witness results in a new unique witness index without needing to scan all opcodes to find the maximum witness index.

Note that if the current witness index is 0, it might mean that there were no witnesses created at all, or that there was exactly one witness.

§opcodes: Vec<Opcode<F>>

The circuit opcodes representing the relationship between witness values.

The opcodes should be further converted into a backend-specific circuit representation. When initial witness inputs are provided, these opcodes can also be used for generating an execution trace.

§private_parameters: BTreeSet<Witness>

The set of private inputs to the circuit.

§public_parameters: PublicInputs

The set of public inputs provided by the prover.

§return_values: PublicInputs

The set of public inputs calculated within the circuit.

§assert_messages: Vec<(OpcodeLocation, AssertionPayload<F>)>

Maps opcode locations to failed assertion payloads. The data in the payload is embedded in the circuit to provide useful feedback to users when a constraint in the circuit is not satisfied.

Implementations§

Source§

impl<F: AcirField> Circuit<F>

Source

pub fn circuit_arguments(&self) -> BTreeSet<Witness>

Returns all witnesses which are required to execute the circuit successfully.

Source

pub fn public_inputs(&self) -> PublicInputs

Returns all public inputs. This includes those provided as parameters to the circuit and those computed as return values.

Source§

impl Circuit<FieldElement>

Source

pub fn from_str(src: &str) -> Result<Self, AcirParserErrorWithSource>

Creates a Circuit object from the given string.

Source

pub fn from_str_impl(src: &str) -> Result<Self, AcirParserErrorWithSource>

Trait Implementations§

Source§

impl<F: Clone + AcirField> Clone for Circuit<F>

Source§

fn clone(&self) -> Circuit<F>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<F: AcirField> Debug for Circuit<F>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<F: Default + AcirField> Default for Circuit<F>

Source§

fn default() -> Circuit<F>

Returns the “default value” for a type. Read more
Source§

impl<'de, F> Deserialize<'de> for Circuit<F>
where F: Deserialize<'de> + AcirField,

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl<F: AcirField> Display for Circuit<F>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FromStr for Circuit<FieldElement>

Source§

type Err = AcirParserErrorWithSource

The associated error which can be returned from parsing.
Source§

fn from_str(src: &str) -> Result<Self, Self::Err>

Parses a string s to return a value of this type. Read more
Source§

impl<F: Hash + AcirField> Hash for Circuit<F>

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<F: PartialEq + AcirField> PartialEq for Circuit<F>

Source§

fn eq(&self, other: &Circuit<F>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<F> Serialize for Circuit<F>
where F: Serialize + AcirField,

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl<F: Eq + AcirField> Eq for Circuit<F>

Source§

impl<F: AcirField> StructuralPartialEq for Circuit<F>

Auto Trait Implementations§

§

impl<F> Freeze for Circuit<F>

§

impl<F> RefUnwindSafe for Circuit<F>
where F: RefUnwindSafe,

§

impl<F> Send for Circuit<F>
where F: Send,

§

impl<F> Sync for Circuit<F>
where F: Sync,

§

impl<F> Unpin for Circuit<F>
where F: Unpin,

§

impl<F> UnwindSafe for Circuit<F>
where F: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,