Struct cairo_vm::vm::runners::cairo_runner::CairoRunner

source ·
pub struct CairoRunner {
    pub vm: VirtualMachine,
    pub program_base: Option<Relocatable>,
    pub relocated_memory: Vec<Option<Felt252>>,
    pub exec_scopes: ExecutionScopes,
    pub relocated_trace: Option<Vec<RelocatedTraceEntry>>,
    /* private fields */
}

Fields§

§vm: VirtualMachine§program_base: Option<Relocatable>§relocated_memory: Vec<Option<Felt252>>§exec_scopes: ExecutionScopes§relocated_trace: Option<Vec<RelocatedTraceEntry>>

Implementations§

source§

impl CairoRunner

source

pub fn new_v2( program: &Program, layout: LayoutName, mode: RunnerMode, trace_enabled: bool, ) -> Result<CairoRunner, RunnerError>

source

pub fn new( program: &Program, layout: LayoutName, proof_mode: bool, trace_enabled: bool, ) -> Result<CairoRunner, RunnerError>

source

pub fn initialize( &mut self, allow_missing_builtins: bool, ) -> Result<Relocatable, RunnerError>

source

pub fn initialize_builtins( &mut self, allow_missing_builtins: bool, ) -> Result<(), RunnerError>

Creates the builtin runners according to the builtins used by the program and the selected layout When running in proof_mode, all builtins in the layout will be created, and only those in the program will be included When not running in proof_mode, only program builtins will be created and included Unless allow_missing_builtins is set to true, an error will be returned if a builtin is included in the program but not on the layout

source

pub fn initialize_program_builtins(&mut self) -> Result<(), RunnerError>

source

pub fn initialize_segments(&mut self, program_base: Option<Relocatable>)

Creates the necessary segments for the program, execution, and each builtin on the MemorySegmentManager and stores the first adress of each of this new segments as each owner’s base

source

pub fn initialize_function_entrypoint( &mut self, entrypoint: usize, stack: Vec<MaybeRelocatable>, return_fp: MaybeRelocatable, ) -> Result<Relocatable, RunnerError>

source

pub fn initialize_vm(&mut self) -> Result<(), RunnerError>

source

pub fn get_initial_fp(&self) -> Option<Relocatable>

source

pub fn get_hint_data( &self, references: &[HintReference], hint_executor: &mut dyn HintProcessor, ) -> Result<Vec<Box<dyn Any>>, VirtualMachineError>

Gets the data used by the HintProcessor to execute each hint

source

pub fn get_constants(&self) -> &HashMap<String, Felt252>

source

pub fn get_program_builtins(&self) -> &Vec<BuiltinName>

source

pub fn run_until_pc( &mut self, address: Relocatable, hint_processor: &mut dyn HintProcessor, ) -> Result<(), VirtualMachineError>

source

pub fn run_for_steps( &mut self, steps: usize, hint_processor: &mut dyn HintProcessor, ) -> Result<(), VirtualMachineError>

Execute an exact number of steps on the program from the actual position.

source

pub fn run_until_steps( &mut self, steps: usize, hint_processor: &mut dyn HintProcessor, ) -> Result<(), VirtualMachineError>

Execute steps until a number of steps since the start of the program is reached.

source

pub fn run_until_next_power_of_2( &mut self, hint_processor: &mut dyn HintProcessor, ) -> Result<(), VirtualMachineError>

Execute steps until the step counter reaches a power of two.

source

pub fn get_perm_range_check_limits(&self) -> Option<(isize, isize)>

source

pub fn check_range_check_usage(&self) -> Result<(), VirtualMachineError>

Checks that there are enough trace cells to fill the entire range check range.

source

pub fn get_memory_holes(&self) -> Result<usize, MemoryError>

Count the number of holes present in the segments.

source

pub fn check_diluted_check_usage(&self) -> Result<(), VirtualMachineError>

Check if there are enough trace cells to fill the entire diluted checks.

source

pub fn end_run( &mut self, disable_trace_padding: bool, disable_finalize_all: bool, hint_processor: &mut dyn HintProcessor, ) -> Result<(), VirtualMachineError>

source

pub fn relocate_trace( &mut self, relocation_table: &[usize], ) -> Result<(), TraceError>

Relocates the VM’s trace, turning relocatable registers to numbered ones

source

pub fn relocate(&mut self, relocate_mem: bool) -> Result<(), TraceError>

source

pub fn get_builtin_segments_info( &self, ) -> Result<Vec<(usize, usize)>, RunnerError>

source

pub fn get_builtin_segment_info_for_pie( &self, ) -> Result<HashMap<BuiltinName, SegmentInfo>, RunnerError>

source

pub fn get_execution_resources(&self) -> Result<ExecutionResources, RunnerError>

source

pub fn finalize_segments(&mut self) -> Result<(), RunnerError>

source

pub fn run_from_entrypoint( &mut self, entrypoint: usize, args: &[&CairoArg], verify_secure: bool, program_segment_size: Option<usize>, hint_processor: &mut dyn HintProcessor, ) -> Result<(), CairoRunError>

Runs a cairo program from a give entrypoint, indicated by its pc offset, with the given arguments. If verify_secure is set to true, verify_secure_runner will be called to run extra verifications. program_segment_size is only used by the verify_secure_runner function and will be ignored if verify_secure is set to false.

source

pub fn check_used_cells(&self) -> Result<(), VirtualMachineError>

source

pub fn check_memory_usage(&self) -> Result<(), VirtualMachineError>

source

pub fn initialize_function_runner_cairo_1( &mut self, program_builtins: &[BuiltinName], ) -> Result<(), RunnerError>

Intitializes the runner in order to run cairo 1 contract entrypoints Swaps the program’s builtins field with program_builtins Initializes program builtins & segments

source

pub fn initialize_function_runner(&mut self) -> Result<(), RunnerError>

Intitializes the runner in order to run cairo 0 contract entrypoints Initializes program builtins & segments

source

pub fn set_entrypoint( &mut self, new_entrypoint: Option<&str>, ) -> Result<(), ProgramError>

Overrides the previous entrypoint with a custom one, or “main” if none is specified.

source

pub fn read_return_values( &mut self, allow_missing_builtins: bool, ) -> Result<(), RunnerError>

source

pub fn get_builtins_final_stack( &mut self, stack_ptr: Relocatable, ) -> Result<Relocatable, RunnerError>

source

pub fn get_program(&self) -> &Program

Return CairoRunner.program

source

pub fn get_cairo_pie(&self) -> Result<CairoPie, RunnerError>

source

pub fn get_air_public_input(&self) -> Result<PublicInput<'_>, PublicInputError>

source

pub fn get_air_private_input(&self) -> AirPrivateInput

source

pub fn get_memory_segment_addresses( &self, ) -> Result<HashMap<&'static str, (usize, usize)>, VirtualMachineError>

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> Conv for T

source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
source§

impl<T> FmtForward for T

source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. 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> Pipe for T
where T: ?Sized,

source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T> Tap for T

source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
source§

impl<T> TryConv for T

source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

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

§

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>,

§

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