pub struct TransactionExecutor<'store, '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> TransactionExecutor<'store, 'auth>
impl<'store, 'auth> TransactionExecutor<'store, 'auth>
Sourcepub fn new(
data_store: &'store dyn DataStore,
authenticator: Option<&'auth dyn TransactionAuthenticator>,
) -> Self
pub fn new( data_store: &'store dyn DataStore, authenticator: Option<&'auth dyn TransactionAuthenticator>, ) -> Self
Creates a new TransactionExecutor instance with the specified DataStore and TransactionAuthenticator.
Sourcepub fn with_options(
data_store: &'store dyn DataStore,
authenticator: Option<&'auth dyn TransactionAuthenticator>,
exec_options: ExecutionOptions,
) -> Result<Self, TransactionExecutorError>
pub fn with_options( data_store: &'store dyn DataStore, authenticator: Option<&'auth dyn TransactionAuthenticator>, exec_options: ExecutionOptions, ) -> Result<Self, TransactionExecutorError>
Creates a new TransactionExecutor instance with the specified DataStore, TransactionAuthenticator and ExecutionOptions.
The specified cycle values (max_cycles and expected_cycles) in the ExecutionOptions
must be 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.
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.
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 fn execute_transaction(
&self,
account_id: AccountId,
block_ref: BlockNumber,
notes: InputNotes<InputNote>,
tx_args: TransactionArgs,
source_manager: Arc<dyn SourceManager>,
) -> Result<ExecutedTransaction, TransactionExecutorError>
pub fn execute_transaction( &self, account_id: AccountId, block_ref: BlockNumber, notes: InputNotes<InputNote>, tx_args: TransactionArgs, source_manager: Arc<dyn SourceManager>, ) -> 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.
The source_manager is used to map potential errors back to their source code. To get the
most value out of it, use the source manager from the
Assembler that assembled the Miden Assembly code
that should be debugged, e.g. account components, note scripts or transaction scripts. If
no error-to-source mapping is desired, a default source manager can be passed, e.g.
DefaultSourceManager::default.
§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 fn execute_tx_view_script(
&self,
account_id: AccountId,
block_ref: BlockNumber,
tx_script: TransactionScript,
advice_inputs: AdviceInputs,
foreign_account_inputs: Vec<AccountInputs>,
source_manager: Arc<dyn SourceManager>,
) -> Result<[Felt; 16], TransactionExecutorError>
pub fn execute_tx_view_script( &self, account_id: AccountId, block_ref: BlockNumber, tx_script: TransactionScript, advice_inputs: AdviceInputs, foreign_account_inputs: Vec<AccountInputs>, source_manager: Arc<dyn SourceManager>, ) -> Result<[Felt; 16], TransactionExecutorError>
Executes an arbitrary script against the given account and returns the stack state at the end of execution.
The source_manager is used to map potential errors back to their source code. To get the
most value out of it, use the source manager from the
Assembler that assembled the Miden Assembly code
that should be debugged, e.g. account components, note scripts or transaction scripts. If
no error-to-source mapping is desired, a default source manager can be passed, e.g.
DefaultSourceManager::default.
§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> Freeze for TransactionExecutor<'store, 'auth>
impl<'store, 'auth> !RefUnwindSafe for TransactionExecutor<'store, 'auth>
impl<'store, 'auth> !Send for TransactionExecutor<'store, 'auth>
impl<'store, 'auth> !Sync for TransactionExecutor<'store, 'auth>
impl<'store, 'auth> Unpin for TransactionExecutor<'store, 'auth>
impl<'store, 'auth> !UnwindSafe for TransactionExecutor<'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<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