TransactionExecutor

Struct TransactionExecutor 

Source
pub struct TransactionExecutor<'store, 'auth, STORE: 'store, AUTH: 'auth> { /* private fields */ }
Expand description

The transaction executor is responsible for executing Miden blockchain transactions.

Transaction execution consists of the following steps:

The transaction executor uses dynamic dispatch with trait objects for the DataStore and TransactionAuthenticator, allowing it to be used with different backend implementations. At the moment of execution, the DataStore is expected to provide all required MAST nodes.

Implementations§

Source§

impl<'store, 'auth, STORE, AUTH> TransactionExecutor<'store, 'auth, STORE, AUTH>
where STORE: DataStore + 'store + Sync, AUTH: TransactionAuthenticator + 'auth + Sync,

Source

pub fn new(data_store: &'store STORE) -> Self

Creates a new TransactionExecutor instance with the specified DataStore.

The created executor will not have the authenticator or source manager set, and tracing and debug mode will be turned off.

Source

pub fn with_authenticator(self, authenticator: &'auth AUTH) -> Self

Adds the specified TransactionAuthenticator to the executor and returns the resulting executor.

This will overwrite any previously set authenticator.

Source

pub fn with_source_manager( self, source_manager: Arc<dyn SourceManagerSync>, ) -> Self

Adds the specified source manager to the executor and returns the resulting executor.

The source_manager is used to map potential errors back to their source code. To get the most value out of it, use the same source manager as was used with the Assembler that assembled the Miden Assembly code that should be debugged, e.g. account components, note scripts or transaction scripts.

This will overwrite any previously set source manager.

Source

pub fn with_options( self, exec_options: ExecutionOptions, ) -> Result<Self, TransactionExecutorError>

Sets the ExecutionOptions for the executor to the provided options and returns the resulting executor.

§Errors

Returns an error if the specified cycle values (max_cycles and expected_cycles) in the ExecutionOptions are not within the range MIN_TX_EXECUTION_CYCLES and MAX_TX_EXECUTION_CYCLES.

Source

pub fn with_debug_mode(self) -> Self

Puts the TransactionExecutor into debug mode and returns the resulting executor.

When transaction executor is in debug mode, all transaction-related code (note scripts, account code) will be compiled and executed in debug mode. This will ensure that all debug instructions present in the original source code are executed.

Source

pub fn with_tracing(self) -> Self

Enables tracing for the created instance of TransactionExecutor and returns the resulting executor.

When tracing is enabled, the executor will receive tracing events as various stages of the transaction kernel complete. This enables collecting basic stats about how long different stages of transaction execution take.

Source

pub async fn execute_transaction( &self, account_id: AccountId, block_ref: BlockNumber, notes: InputNotes<InputNote>, tx_args: TransactionArgs, ) -> Result<ExecutedTransaction, TransactionExecutorError>

Prepares and executes a transaction specified by the provided arguments and returns an ExecutedTransaction.

The method first fetches the data required to execute the transaction from the DataStore and compile the transaction into an executable program. In particular, it fetches the account identified by the account ID from the store as well as block_ref, the header of the reference block of the transaction and the set of headers from the blocks in which the provided notes were created. Then, it executes the transaction program and creates an ExecutedTransaction.

§Errors:

Returns an error if:

  • If required data can not be fetched from the DataStore.
  • If the transaction arguments contain foreign account data not anchored in the reference block.
  • If any input notes were created in block numbers higher than the reference block.
Source

pub async fn execute_tx_view_script( &self, account_id: AccountId, block_ref: BlockNumber, tx_script: TransactionScript, advice_inputs: AdviceInputs, ) -> Result<[Felt; 16], TransactionExecutorError>

Executes an arbitrary script against the given account and returns the stack state at the end of execution.

§Errors:

Returns an error if:

  • If required data can not be fetched from the DataStore.
  • If the transaction host can not be created from the provided values.
  • If the execution of the provided program fails.

Auto Trait Implementations§

§

impl<'store, 'auth, STORE, AUTH> Freeze for TransactionExecutor<'store, 'auth, STORE, AUTH>

§

impl<'store, 'auth, STORE, AUTH> !RefUnwindSafe for TransactionExecutor<'store, 'auth, STORE, AUTH>

§

impl<'store, 'auth, STORE, AUTH> Send for TransactionExecutor<'store, 'auth, STORE, AUTH>
where STORE: Sync, AUTH: Sync,

§

impl<'store, 'auth, STORE, AUTH> Sync for TransactionExecutor<'store, 'auth, STORE, AUTH>
where STORE: Sync, AUTH: Sync,

§

impl<'store, 'auth, STORE, AUTH> Unpin for TransactionExecutor<'store, 'auth, STORE, AUTH>

§

impl<'store, 'auth, STORE, AUTH> !UnwindSafe for TransactionExecutor<'store, 'auth, STORE, AUTH>

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