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
impl CairoRunner
pub fn new_v2( program: &Program, layout: LayoutName, mode: RunnerMode, trace_enabled: bool, ) -> Result<CairoRunner, RunnerError>
pub fn new( program: &Program, layout: LayoutName, proof_mode: bool, trace_enabled: bool, ) -> Result<CairoRunner, RunnerError>
pub fn initialize( &mut self, allow_missing_builtins: bool, ) -> Result<Relocatable, RunnerError>
sourcepub fn initialize_builtins(
&mut self,
allow_missing_builtins: bool,
) -> Result<(), RunnerError>
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
pub fn initialize_program_builtins(&mut self) -> Result<(), RunnerError>
sourcepub fn initialize_segments(&mut self, program_base: Option<Relocatable>)
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
pub fn initialize_function_entrypoint( &mut self, entrypoint: usize, stack: Vec<MaybeRelocatable>, return_fp: MaybeRelocatable, ) -> Result<Relocatable, RunnerError>
pub fn initialize_vm(&mut self) -> Result<(), RunnerError>
pub fn get_initial_fp(&self) -> Option<Relocatable>
sourcepub fn get_hint_data(
&self,
references: &[HintReference],
hint_executor: &mut dyn HintProcessor,
) -> Result<Vec<Box<dyn Any>>, VirtualMachineError>
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
pub fn get_constants(&self) -> &HashMap<String, Felt252>
pub fn get_program_builtins(&self) -> &Vec<BuiltinName>
pub fn run_until_pc( &mut self, address: Relocatable, hint_processor: &mut dyn HintProcessor, ) -> Result<(), VirtualMachineError>
sourcepub fn run_for_steps(
&mut self,
steps: usize,
hint_processor: &mut dyn HintProcessor,
) -> Result<(), VirtualMachineError>
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.
sourcepub fn run_until_steps(
&mut self,
steps: usize,
hint_processor: &mut dyn HintProcessor,
) -> Result<(), VirtualMachineError>
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.
sourcepub fn run_until_next_power_of_2(
&mut self,
hint_processor: &mut dyn HintProcessor,
) -> Result<(), VirtualMachineError>
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.
pub fn get_perm_range_check_limits(&self) -> Option<(isize, isize)>
sourcepub fn check_range_check_usage(&self) -> Result<(), VirtualMachineError>
pub fn check_range_check_usage(&self) -> Result<(), VirtualMachineError>
Checks that there are enough trace cells to fill the entire range check range.
sourcepub fn get_memory_holes(&self) -> Result<usize, MemoryError>
pub fn get_memory_holes(&self) -> Result<usize, MemoryError>
Count the number of holes present in the segments.
sourcepub fn check_diluted_check_usage(&self) -> Result<(), VirtualMachineError>
pub fn check_diluted_check_usage(&self) -> Result<(), VirtualMachineError>
Check if there are enough trace cells to fill the entire diluted checks.
pub fn end_run( &mut self, disable_trace_padding: bool, disable_finalize_all: bool, hint_processor: &mut dyn HintProcessor, ) -> Result<(), VirtualMachineError>
sourcepub fn relocate_trace(
&mut self,
relocation_table: &[usize],
) -> Result<(), TraceError>
pub fn relocate_trace( &mut self, relocation_table: &[usize], ) -> Result<(), TraceError>
Relocates the VM’s trace, turning relocatable registers to numbered ones
pub fn relocate(&mut self, relocate_mem: bool) -> Result<(), TraceError>
pub fn get_builtin_segments_info( &self, ) -> Result<Vec<(usize, usize)>, RunnerError>
pub fn get_builtin_segment_info_for_pie( &self, ) -> Result<HashMap<BuiltinName, SegmentInfo>, RunnerError>
pub fn get_execution_resources(&self) -> Result<ExecutionResources, RunnerError>
pub fn finalize_segments(&mut self) -> Result<(), RunnerError>
sourcepub 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>
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.
pub fn check_used_cells(&self) -> Result<(), VirtualMachineError>
pub fn check_memory_usage(&self) -> Result<(), VirtualMachineError>
sourcepub fn initialize_function_runner_cairo_1(
&mut self,
program_builtins: &[BuiltinName],
) -> Result<(), RunnerError>
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
sourcepub fn initialize_function_runner(&mut self) -> Result<(), RunnerError>
pub fn initialize_function_runner(&mut self) -> Result<(), RunnerError>
Intitializes the runner in order to run cairo 0 contract entrypoints Initializes program builtins & segments
sourcepub fn set_entrypoint(
&mut self,
new_entrypoint: Option<&str>,
) -> Result<(), ProgramError>
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.
pub fn read_return_values( &mut self, allow_missing_builtins: bool, ) -> Result<(), RunnerError>
pub fn get_builtins_final_stack( &mut self, stack_ptr: Relocatable, ) -> Result<Relocatable, RunnerError>
sourcepub fn get_program(&self) -> &Program
pub fn get_program(&self) -> &Program
Return CairoRunner.program
pub fn get_cairo_pie(&self) -> Result<CairoPie, RunnerError>
pub fn get_air_public_input(&self) -> Result<PublicInput<'_>, PublicInputError>
pub fn get_air_private_input(&self) -> AirPrivateInput
pub fn get_memory_segment_addresses( &self, ) -> Result<HashMap<&'static str, (usize, usize)>, VirtualMachineError>
Auto Trait Implementations§
impl Freeze for CairoRunner
impl !RefUnwindSafe for CairoRunner
impl !Send for CairoRunner
impl !Sync for CairoRunner
impl Unpin for CairoRunner
impl !UnwindSafe for CairoRunner
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> FmtForward for T
impl<T> FmtForward for T
source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moresource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
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
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
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
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.source§impl<T> Tap for T
impl<T> Tap for T
source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moresource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moresource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moresource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moresource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.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
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.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
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.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
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.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
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.