#[cfg(feature = "non-pdk")]
use rialo_s_message::inner_instruction::InnerInstructionsList;
use rialo_s_pubkey::Pubkey;
use serde::{Deserialize, Serialize};
#[derive(Debug, Default, Clone, Copy, Eq, PartialEq, Serialize, Deserialize)]
pub struct FeeDetails {
pub transaction_fee: u64,
pub prioritization_fee: u64,
}
impl FeeDetails {
pub fn new(transaction_fee: u64, prioritization_fee: u64) -> Self {
Self {
transaction_fee,
prioritization_fee,
}
}
pub fn total_fee(&self) -> u64 {
self.transaction_fee.saturating_add(self.prioritization_fee)
}
}
pub use rialo_shared_types::InstructionError;
pub use rialo_shared_types::TransactionError;
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct TransactionExecutionResults {
pub timestamp: u64,
pub block_height: u64,
pub committed_transaction: CommittedTransaction,
#[serde(default)]
pub transaction_index_in_block: u32,
#[serde(default)]
pub subscription_pubkey: Option<Pubkey>,
}
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct TransactionReturnData {
pub program_id: Pubkey,
pub data: Vec<u8>,
}
impl TransactionReturnData {
pub fn new(program_id: Pubkey, data: Vec<u8>) -> Self {
Self { program_id, data }
}
}
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct TransactionLoadedAccountsStats {
pub loaded_accounts_data_size: u32,
pub loaded_accounts_count: usize,
}
impl TransactionLoadedAccountsStats {
pub fn new(loaded_accounts_data_size: u32, loaded_accounts_count: usize) -> Self {
Self {
loaded_accounts_data_size,
loaded_accounts_count,
}
}
}
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct CommittedTransaction {
pub transaction_error: Option<TransactionError>,
pub log_messages: Option<Vec<String>>,
#[cfg(feature = "non-pdk")]
pub inner_instructions: Option<InnerInstructionsList>,
pub return_data: Option<TransactionReturnData>,
pub executed_units: u64,
pub fee_details: FeeDetails,
pub loaded_account_stats: TransactionLoadedAccountsStats,
}
#[cfg(any(test, feature = "testing", feature = "dev-context-only-utils"))]
impl TransactionExecutionResults {
pub fn new_for_testing() -> Self {
Self {
timestamp: 0,
block_height: 0,
committed_transaction: CommittedTransaction::default(),
transaction_index_in_block: 0,
subscription_pubkey: None,
}
}
pub fn new_for_testing_with_timestamp(timestamp: u64) -> Self {
Self {
timestamp,
block_height: 0,
committed_transaction: CommittedTransaction::default(),
transaction_index_in_block: 0,
subscription_pubkey: None,
}
}
pub fn new_for_testing_with_details(
timestamp: u64,
block_height: u64,
log_messages: Option<Vec<String>>,
) -> Self {
Self {
timestamp,
block_height,
committed_transaction: CommittedTransaction {
transaction_error: None,
log_messages,
#[cfg(feature = "non-pdk")]
inner_instructions: None,
return_data: None,
executed_units: 0,
fee_details: FeeDetails::default(),
loaded_account_stats: TransactionLoadedAccountsStats::default(),
},
transaction_index_in_block: 0,
subscription_pubkey: None,
}
}
}
#[derive(Clone, Debug, PartialEq, Eq, Default, serde::Serialize, serde::Deserialize)]
pub struct AddressSignatureMetadata {
pub writeable: bool,
}