ExecutionTracer

Struct ExecutionTracer 

Source
pub struct ExecutionTracer {
Show 14 fields pub overflow_table: OverflowTable, pub overflow_replay: StackOverflowReplay, pub block_stack: BlockStack, pub block_stack_replay: BlockStackReplay, pub hasher_chiplet_shim: HasherChipletShim, pub memory_reads: MemoryReadsReplay, pub advice: AdviceReplay, pub external: MastForestResolutionReplay, pub range_checker: RangeCheckerReplay, pub memory_writes: MemoryWritesReplay, pub bitwise: BitwiseReplay, pub kernel: KernelReplay, pub hasher_for_chiplet: HasherRequestReplay, pub ace: AceReplay, /* private fields */
}
Expand description

Builder for recording the context to generate trace fragments during execution.

Specifically, this records the information necessary to be able to generate the trace in fragments of configurable length. This requires storing state at the very beginning of the fragment before any operations are executed, as well as recording the various values read during execution in the corresponding “replays” (e.g. values read from memory are recorded in MemoryReadsReplay, values read from the advice provider are recorded in AdviceReplay, etc).

Then, to generate a trace fragment, we initialize the state of the processor using the stored snapshot from the beginning of the fragment, and replay the recorded values as they are encountered during execution (e.g. when encountering a memory read operation, we will replay the value rather than querying the memory chiplet).

Fields§

§overflow_table: OverflowTable§overflow_replay: StackOverflowReplay§block_stack: BlockStack§block_stack_replay: BlockStackReplay§hasher_chiplet_shim: HasherChipletShim§memory_reads: MemoryReadsReplay§advice: AdviceReplay§external: MastForestResolutionReplay§range_checker: RangeCheckerReplay§memory_writes: MemoryWritesReplay§bitwise: BitwiseReplay§kernel: KernelReplay§hasher_for_chiplet: HasherRequestReplay§ace: AceReplay

Implementations§

Source§

impl ExecutionTracer

Source

pub fn new(fragment_size: usize) -> Self

Creates a new ExecutionTracer with the given fragment size.

Source

pub fn into_trace_generation_context( self, final_pc_transcript: PrecompileTranscript, ) -> TraceGenerationContext

Convert the ExecutionTracer into a TraceGenerationContext using the data accumulated during execution.

The final_pc_transcript parameter represents the final precompile transcript at the end of execution, which is needed for the auxiliary trace column builder.

Trait Implementations§

Source§

impl Debug for ExecutionTracer

Source§

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

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

impl Tracer for ExecutionTracer

Source§

fn start_clock_cycle( &mut self, processor: &FastProcessor, execution_state: NodeExecutionState, continuation_stack: &mut ContinuationStack, current_forest: &Arc<MastForest>, )

When sufficiently many clock cycles have elapsed, starts a new trace state. Also updates the internal block stack.

Source§

fn record_mast_forest_resolution( &mut self, node_id: MastNodeId, forest: &Arc<MastForest>, )

Source§

fn record_hasher_permute( &mut self, input_state: [Felt; 12], output_state: [Felt; 12], )

Records the result of a call to Hasher::permute().
Source§

fn record_hasher_build_merkle_root( &mut self, node: Word, path: Option<&MerklePath>, index: Felt, output_root: Word, )

Records the result of a call to Hasher::build_merkle_root(). Read more
Source§

fn record_hasher_update_merkle_root( &mut self, old_value: Word, new_value: Word, path: Option<&MerklePath>, index: Felt, old_root: Word, new_root: Word, )

Records the result of a call to Hasher::update_merkle_root(). Read more
Source§

fn record_memory_read_element( &mut self, element: Felt, addr: Felt, ctx: ContextId, clk: RowIndex, )

Records the element read from memory at the given address.
Source§

fn record_memory_read_word( &mut self, word: Word, addr: Felt, ctx: ContextId, clk: RowIndex, )

Records the word read from memory at the given address.
Source§

fn record_memory_write_element( &mut self, element: Felt, addr: Felt, ctx: ContextId, clk: RowIndex, )

Records the element written to memory at the given address.
Source§

fn record_memory_write_word( &mut self, word: Word, addr: Felt, ctx: ContextId, clk: RowIndex, )

Records the word written to memory at the given address.
Source§

fn record_advice_pop_stack(&mut self, value: Felt)

Records the value returned by a crate::host::advice::AdviceProvider::pop_stack operation.
Source§

fn record_advice_pop_stack_word(&mut self, word: Word)

Records the value returned by a crate::host::advice::AdviceProvider::pop_stack_word operation.
Source§

fn record_advice_pop_stack_dword(&mut self, words: [Word; 2])

Records the value returned by a crate::host::advice::AdviceProvider::pop_stack_dword operation.
Source§

fn record_u32and(&mut self, a: Felt, b: Felt)

Records the operands of a u32and operation.
Source§

fn record_u32xor(&mut self, a: Felt, b: Felt)

Records the operands of a u32xor operation.
Source§

fn record_u32_range_checks(&mut self, clk: RowIndex, u32_lo: Felt, u32_hi: Felt)

Records the high and low 32-bit limbs of the result of a u32 operation for the purposes of the range checker. This is expected to result in four 16-bit range checks.
Source§

fn record_kernel_proc_access(&mut self, proc_hash: Word)

Records the procedure hash of a syscall.
Source§

fn record_circuit_evaluation( &mut self, clk: RowIndex, circuit_eval: CircuitEvaluation, )

Records the evaluation of a circuit.
Source§

fn increment_clk(&mut self)

Signals that the processor clock is being incremented.
Source§

fn increment_stack_size(&mut self, processor: &FastProcessor)

Signals that the stack depth is incremented as a result of pushing a new element.
Source§

fn decrement_stack_size(&mut self)

Signals that the stack depth is decremented as a result of popping an element off the stack. Read more
Source§

fn start_context(&mut self)

Signals the start of a new execution context, as a result of a CALL, SYSCALL or DYNCALL operation being executed.
Source§

fn restore_context(&mut self)

Signals the end of an execution context, as a result of an END operation associated with a CALL, SYSCALL or DYNCALL.

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

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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