pub struct Executor { /* private fields */ }Expand description
The Executor is responsible for executing a program with the Miden VM.
It is used by either converting it into a DebugExecutor, and using that to manage execution step-by-step, such as is done by the debugger; or by running the program to completion and obtaining an ExecutionTrace, which can be used to introspect the final program state.
Implementations§
Source§impl Executor
impl Executor
Sourcepub fn new(args: Vec<Felt>) -> Self
pub fn new(args: Vec<Felt>) -> Self
Construct an executor with the given arguments on the operand stack
Sourcepub fn from_config(config: ExecutionConfig) -> Self
pub fn from_config(config: ExecutionConfig) -> Self
Construct an executor from the given configuration
NOTE: The execution options for tracing/debugging will be set to true for you
pub fn with_registry(self, registry: HybridPackageRegistry) -> Self
Sourcepub fn with_advice_inputs(&mut self, advice: AdviceInputs) -> &mut Self
pub fn with_advice_inputs(&mut self, advice: AdviceInputs) -> &mut Self
Set the contents of memory for the shadow stack frame of the entrypoint
Sourcepub fn with_package(
&mut self,
package: Arc<Package>,
) -> Result<&mut Self, Report>
pub fn with_package( &mut self, package: Arc<Package>, ) -> Result<&mut Self, Report>
Add a Package to the execution context
Sourcepub fn with_event_advice_mutations_recording(&mut self) -> &mut Self
pub fn with_event_advice_mutations_recording(&mut self) -> &mut Self
Record the advice mutations produced by each event handler invocation during execution.
Recording is a private detail of the debug host created by Executor::into_debug: once the program completes, take the log via DebuggerHost::take_recorded_event_mutations on the DebugExecutor’s host, and feed it back into Executor::into_debug_with_replay to debug the same execution later without the original event handlers (e.g. transaction debugging with event replay).
Mutations are only recorded for live event handling; nothing is recorded while an event replay queue is being consumed.
Sourcepub fn register_event_handler(
&mut self,
event: EventName,
handler: Arc<dyn EventHandler>,
) -> Result<&mut Self, ExecutionError>
pub fn register_event_handler( &mut self, event: EventName, handler: Arc<dyn EventHandler>, ) -> Result<&mut Self, ExecutionError>
Register a VM event handler to be available during execution.
Sourcepub fn with_profiler_config(
&mut self,
profiler_config: ProfilerConfig,
) -> &mut Self
pub fn with_profiler_config( &mut self, profiler_config: ProfilerConfig, ) -> &mut Self
Set the profiler configuration for this executor.
Sourcepub fn into_debug(
self,
package: Arc<Package>,
source_manager: Arc<dyn SourceManager>,
) -> DebugExecutor
pub fn into_debug( self, package: Arc<Package>, source_manager: Arc<dyn SourceManager>, ) -> DebugExecutor
Convert this Executor into a DebugExecutor, which captures much more information about the program being executed, and must be stepped manually.
Sourcepub fn into_debug_with_replay(
self,
package: Arc<Package>,
source_manager: Arc<dyn SourceManager>,
extra_mast_forests: Vec<LoadedMastForest>,
event_replay: VecDeque<Vec<AdviceMutation>>,
) -> DebugExecutor
pub fn into_debug_with_replay( self, package: Arc<Package>, source_manager: Arc<dyn SourceManager>, extra_mast_forests: Vec<LoadedMastForest>, event_replay: VecDeque<Vec<AdviceMutation>>, ) -> DebugExecutor
Convert this Executor into a DebugExecutor with event replay support.
Like into_debug, but additionally:
- Loads
extra_forestsinto the host’s MAST forest store - Sets the event replay queue so that
on_event()returns pre-recorded mutations
This is used for transaction debugging where events were recorded during a prior execution with the real transaction host.
Sourcepub fn capture_trace(
self,
package: Arc<Package>,
source_manager: Arc<dyn SourceManager>,
) -> ExecutionTrace
pub fn capture_trace( self, package: Arc<Package>, source_manager: Arc<dyn SourceManager>, ) -> ExecutionTrace
Execute the given program until termination, producing a trace
Sourcepub fn execute(
self,
package: Arc<Package>,
source_manager: Arc<dyn SourceManager>,
) -> ExecutionTrace
pub fn execute( self, package: Arc<Package>, source_manager: Arc<dyn SourceManager>, ) -> ExecutionTrace
Execute the given program, producing a trace
Sourcepub fn execute_into<T>(
self,
package: Arc<Package>,
source_manager: Arc<dyn SourceManager>,
) -> Twhere
T: FromMidenRepr + PartialEq,
pub fn execute_into<T>(
self,
package: Arc<Package>,
source_manager: Arc<dyn SourceManager>,
) -> Twhere
T: FromMidenRepr + PartialEq,
Execute a program, parsing the operand stack outputs as a value of type T
Auto Trait Implementations§
impl !RefUnwindSafe for Executor
impl !Send for Executor
impl !Sync for Executor
impl !UnwindSafe for Executor
impl Freeze for Executor
impl Unpin for Executor
impl UnsafeUnpin for Executor
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
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<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more