solana_svm/
transaction_execution_result.rs

1// Re-exported since these have moved to `solana_sdk`.
2#[deprecated(
3    since = "1.18.0",
4    note = "Please use `solana_sdk::inner_instruction` types instead"
5)]
6pub use solana_sdk::inner_instruction::{InnerInstruction, InnerInstructionsList};
7use {
8    crate::account_loader::LoadedTransaction,
9    solana_program_runtime::loaded_programs::ProgramCacheEntry,
10    solana_pubkey::Pubkey,
11    solana_transaction_context::TransactionReturnData,
12    solana_transaction_error::TransactionResult,
13    std::{collections::HashMap, sync::Arc},
14};
15
16#[derive(Debug, Default, Clone, PartialEq)]
17pub struct TransactionLoadedAccountsStats {
18    pub loaded_accounts_data_size: u32,
19    pub loaded_accounts_count: usize,
20}
21
22#[derive(Debug, Clone)]
23pub struct ExecutedTransaction {
24    pub loaded_transaction: LoadedTransaction,
25    pub execution_details: TransactionExecutionDetails,
26    pub programs_modified_by_tx: HashMap<Pubkey, Arc<ProgramCacheEntry>>,
27}
28
29impl ExecutedTransaction {
30    pub fn was_successful(&self) -> bool {
31        self.execution_details.was_successful()
32    }
33}
34
35#[derive(Clone, Debug, Eq, PartialEq)]
36pub struct TransactionExecutionDetails {
37    pub status: TransactionResult<()>,
38    pub log_messages: Option<Vec<String>>,
39    pub inner_instructions: Option<InnerInstructionsList>,
40    pub return_data: Option<TransactionReturnData>,
41    pub executed_units: u64,
42    /// The change in accounts data len for this transaction.
43    /// NOTE: This value is valid IFF `status` is `Ok`.
44    pub accounts_data_len_delta: i64,
45}
46
47impl TransactionExecutionDetails {
48    pub fn was_successful(&self) -> bool {
49        self.status.is_ok()
50    }
51}