solana_svm/
transaction_execution_result.rs

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