solana_banks_interface/
lib.rs

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