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:
- Fetch the data required to execute a transaction from the DataStore.
- Execute the transaction program and create an ExecutedTransaction.
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>
impl<'store, 'auth, STORE, AUTH> TransactionExecutor<'store, 'auth, STORE, AUTH>
Sourcepub fn new(data_store: &'store STORE) -> Self
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.
Sourcepub fn with_authenticator(self, authenticator: &'auth AUTH) -> Self
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.
Sourcepub fn with_source_manager(
self,
source_manager: Arc<dyn SourceManagerSync>,
) -> Self
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.
Sourcepub fn with_options(
self,
exec_options: ExecutionOptions,
) -> Result<Self, TransactionExecutorError>
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.
Sourcepub fn with_debug_mode(self) -> Self
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.
Sourcepub fn with_tracing(self) -> Self
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.
Sourcepub async fn execute_transaction(
&self,
account_id: AccountId,
block_ref: BlockNumber,
notes: InputNotes<InputNote>,
tx_args: TransactionArgs,
) -> Result<ExecutedTransaction, TransactionExecutorError>
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.
Sourcepub async fn execute_tx_view_script(
&self,
account_id: AccountId,
block_ref: BlockNumber,
tx_script: TransactionScript,
advice_inputs: AdviceInputs,
) -> Result<[Felt; 16], TransactionExecutorError>
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>
impl<'store, 'auth, STORE, AUTH> Sync for TransactionExecutor<'store, 'auth, STORE, AUTH>
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> 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> 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