solana_banks_interface/
lib.rs

1#![allow(deprecated)]
2
3use {
4    serde_derive::{Deserialize, Serialize},
5    solana_account::Account,
6    solana_clock::Slot,
7    solana_commitment_config::CommitmentLevel,
8    solana_hash::Hash,
9    solana_message::{inner_instruction::InnerInstructions, Message},
10    solana_pubkey::Pubkey,
11    solana_signature::Signature,
12    solana_transaction::versioned::VersionedTransaction,
13    solana_transaction_context::TransactionReturnData,
14    solana_transaction_error::TransactionError,
15};
16
17mod transaction {
18    pub use solana_transaction_error::TransactionResult as Result;
19}
20
21#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
22pub enum TransactionConfirmationStatus {
23    Processed,
24    Confirmed,
25    Finalized,
26}
27
28#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
29pub struct TransactionStatus {
30    pub slot: Slot,
31    pub confirmations: Option<usize>, // None = rooted
32    pub err: Option<TransactionError>,
33    pub confirmation_status: Option<TransactionConfirmationStatus>,
34}
35
36#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
37#[serde(rename_all = "camelCase")]
38pub struct TransactionSimulationDetails {
39    pub logs: Vec<String>,
40    pub units_consumed: u64,
41    pub loaded_accounts_data_size: u32,
42    pub return_data: Option<TransactionReturnData>,
43    pub inner_instructions: Option<Vec<InnerInstructions>>,
44}
45
46#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
47#[serde(rename_all = "camelCase")]
48pub struct TransactionMetadata {
49    pub log_messages: Vec<String>,
50    pub compute_units_consumed: u64,
51    pub return_data: Option<TransactionReturnData>,
52}
53
54#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
55pub struct BanksTransactionResultWithSimulation {
56    pub result: Option<transaction::Result<()>>,
57    pub simulation_details: Option<TransactionSimulationDetails>,
58}
59
60#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
61pub struct BanksTransactionResultWithMetadata {
62    pub result: transaction::Result<()>,
63    pub metadata: Option<TransactionMetadata>,
64}
65
66#[tarpc::service]
67pub trait Banks {
68    async fn send_transaction_with_context(transaction: VersionedTransaction);
69    async fn get_transaction_status_with_context(signature: Signature)
70        -> Option<TransactionStatus>;
71    async fn get_slot_with_context(commitment: CommitmentLevel) -> Slot;
72    async fn get_block_height_with_context(commitment: CommitmentLevel) -> u64;
73    async fn process_transaction_with_preflight_and_commitment_and_context(
74        transaction: VersionedTransaction,
75        commitment: CommitmentLevel,
76    ) -> BanksTransactionResultWithSimulation;
77    async fn process_transaction_with_commitment_and_context(
78        transaction: VersionedTransaction,
79        commitment: CommitmentLevel,
80    ) -> Option<transaction::Result<()>>;
81    async fn process_transaction_with_metadata_and_context(
82        transaction: VersionedTransaction,
83    ) -> BanksTransactionResultWithMetadata;
84    async fn simulate_transaction_with_commitment_and_context(
85        transaction: VersionedTransaction,
86        commitment: CommitmentLevel,
87    ) -> BanksTransactionResultWithSimulation;
88    async fn get_account_with_commitment_and_context(
89        address: Pubkey,
90        commitment: CommitmentLevel,
91    ) -> Option<Account>;
92    async fn get_latest_blockhash_with_context() -> Hash;
93    async fn get_latest_blockhash_with_commitment_and_context(
94        commitment: CommitmentLevel,
95    ) -> Option<(Hash, u64)>;
96    async fn get_fee_for_message_with_commitment_and_context(
97        message: Message,
98        commitment: CommitmentLevel,
99    ) -> Option<u64>;
100}
101
102#[cfg(test)]
103mod tests {
104    use {
105        super::*,
106        tarpc::{client, transport},
107    };
108
109    #[test]
110    fn test_banks_client_new() {
111        let (client_transport, _server_transport) = transport::channel::unbounded();
112        BanksClient::new(client::Config::default(), client_transport);
113    }
114}