AdviceProvider

Struct AdviceProvider 

Source
pub struct AdviceProvider { /* private fields */ }
Expand description

An advice provider is a component through which the host can interact with the advice provider. The host can request nondeterministic inputs from the advice provider (i.e., result of a computation performed outside of the VM), as well as insert new data into the advice provider.

An advice provider consists of the following components:

  1. Advice stack, which is a LIFO data structure. The processor can move the elements from the advice stack onto the operand stack, as well as push new elements onto the advice stack.
  2. Advice map, which is a key-value map where keys are words (4 field elements) and values are vectors of field elements. The processor can push the values from the map onto the advice stack, as well as insert new values into the map.
  3. Merkle store, which contains structured data reducible to Merkle paths. The VM can request Merkle paths from the store, as well as mutate it by updating or merging nodes contained in the store.

Advice data is store in-memory using BTreeMaps as its backing storage.

Implementations§

Source§

impl AdviceProvider

Source

pub fn apply_mutations( &mut self, mutations: impl IntoIterator<Item = AdviceMutation>, ) -> Result<(), AdviceError>

Apply the mutations given in order to the AdviceProvider.

Source

pub fn pop_stack(&mut self) -> Result<Felt, AdviceError>

Pops an element from the advice stack and returns it.

§Errors

Returns an error if the advice stack is empty.

Source

pub fn pop_stack_word(&mut self) -> Result<Word, AdviceError>

Pops a word (4 elements) from the advice stack and returns it.

Note: a word is popped off the stack element-by-element. For example, a [d, c, b, a, ...] stack (i.e., d is at the top of the stack) will yield [d, c, b, a].

§Errors

Returns an error if the advice stack does not contain a full word.

Source

pub fn pop_stack_dword(&mut self) -> Result<[Word; 2], AdviceError>

Pops a double word (8 elements) from the advice stack and returns them.

Note: words are popped off the stack element-by-element. For example, a [h, g, f, e, d, c, b, a, ...] stack (i.e., h is at the top of the stack) will yield two words: [h, g, f,e ], [d, c, b, a].

§Errors

Returns an error if the advice stack does not contain two words.

Source

pub fn push_stack(&mut self, value: Felt)

Pushes a single value onto the advice stack.

Source

pub fn push_stack_word(&mut self, word: &Word)

Pushes a word (4 elements) onto the stack.

Source

pub fn push_from_map( &mut self, key: Word, include_len: bool, ) -> Result<(), AdviceError>

Fetches a list of elements under the specified key from the advice map and pushes them onto the advice stack.

If include_len is set to true, this also pushes the number of elements onto the advice stack.

Note: this operation doesn’t consume the map element so it can be called multiple times for the same key.

§Example

Given an advice stack [a, b, c, ...], and a map x |-> [d, e, f]:

A call push_stack(AdviceSource::Map { key: x, include_len: false }) will result in advice stack: [d, e, f, a, b, c, ...].

A call push_stack(AdviceSource::Map { key: x, include_len: true }) will result in advice stack: [3, d, e, f, a, b, c, ...].

§Errors

Returns an error if the key was not found in the key-value map.

Source

pub fn stack(&self) -> &[Felt]

Returns the current stack.

Source

pub fn extend_stack<I>(&mut self, iter: I)
where I: IntoIterator<Item = Felt>,

Extends the stack with the given elements.

Elements are added to the top of the stack i.e. last element of this iterator is the first element popped.

Source

pub fn contains_map_key(&self, key: &Word) -> bool

Returns true if the key has a corresponding value in the map.

Source

pub fn get_mapped_values(&self, key: &Word) -> Option<&[Felt]>

Returns a reference to the value(s) associated with the specified key in the advice map.

Source

pub fn insert_into_map( &mut self, key: Word, values: Vec<Felt>, ) -> Result<(), AdviceError>

Inserts the provided value into the advice map under the specified key.

The values in the advice map can be moved onto the advice stack by invoking the AdviceProvider::push_from_map() method.

Returns an error if the specified key is already present in the advice map.

Source

pub fn extend_map(&mut self, other: &AdviceMap) -> Result<(), AdviceError>

Merges all entries from the given AdviceMap into the current advice map.

Returns an error if any new entry already exists with the same key but a different value than the one currently stored. The current map remains unchanged.

Source

pub fn get_tree_node( &self, root: Word, depth: &Felt, index: &Felt, ) -> Result<Word, AdviceError>

Returns a node at the specified depth and index in a Merkle tree with the given root.

§Errors

Returns an error if:

  • A Merkle tree for the specified root cannot be found in this advice provider.
  • The specified depth is either zero or greater than the depth of the Merkle tree identified by the specified root.
  • Value of the node at the specified depth and index is not known to this advice provider.
Source

pub fn get_merkle_path( &self, root: Word, depth: &Felt, index: &Felt, ) -> Result<MerklePath, AdviceError>

Returns a path to a node at the specified depth and index in a Merkle tree with the specified root.

§Errors

Returns an error if:

  • A Merkle tree for the specified root cannot be found in this advice provider.
  • The specified depth is either zero or greater than the depth of the Merkle tree identified by the specified root.
  • Path to the node at the specified depth and index is not known to this advice provider.
Source

pub fn update_merkle_node( &mut self, root: Word, depth: &Felt, index: &Felt, value: Word, ) -> Result<(MerklePath, Word), AdviceError>

Updates a node at the specified depth and index in a Merkle tree with the specified root; returns the Merkle path from the updated node to the new root, together with the new root.

The tree is cloned prior to the update. Thus, the advice provider retains the original and the updated tree.

§Errors

Returns an error if:

  • A Merkle tree for the specified root cannot be found in this advice provider.
  • The specified depth is either zero or greater than the depth of the Merkle tree identified by the specified root.
  • Path to the leaf at the specified index in the specified Merkle tree is not known to this advice provider.
Source

pub fn merge_roots(&mut self, lhs: Word, rhs: Word) -> Result<Word, AdviceError>

Creates a new Merkle tree in the advice provider by combining Merkle trees with the specified roots. The root of the new tree is defined as hash(left_root, right_root).

After the operation, both the original trees and the new tree remains in the advice provider (i.e., the input trees are not removed).

It is not checked whether a Merkle tree for either of the specified roots can be found in this advice provider.

Source

pub fn has_merkle_root(&self, root: Word) -> bool

Returns true if the Merkle root exists for the advice provider Merkle store.

Source

pub fn extend_merkle_store<I>(&mut self, iter: I)
where I: IntoIterator<Item = InnerNodeInfo>,

Extends the MerkleStore with the given nodes.

Source

pub fn extend_from_inputs( &mut self, inputs: &AdviceInputs, ) -> Result<(), AdviceError>

Extends the contents of this instance with the contents of an AdviceInputs.

Source

pub fn into_parts(self) -> (Vec<Felt>, AdviceMap, MerkleStore)

Consumes self and return its parts (stack, map, store).

Note that the order of the stack is such that the element at the top of the stack is at the end of the returned vector.

Trait Implementations§

Source§

impl Clone for AdviceProvider

Source§

fn clone(&self) -> AdviceProvider

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 Debug for AdviceProvider

Source§

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

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

impl Default for AdviceProvider

Source§

fn default() -> AdviceProvider

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

impl From<AdviceInputs> for AdviceProvider

Source§

fn from(inputs: AdviceInputs) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

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

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
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, 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.
Source§

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

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more