solana_banks_interface/
lib.rs

1#![allow(deprecated)]
2
3use {
4    serde_derive::{Deserialize, Serialize},
5    solana_sdk::{
6        account::Account,
7        clock::Slot,
8        commitment_config::CommitmentLevel,
9        hash::Hash,
10        inner_instruction::InnerInstructions,
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    pub inner_instructions: Option<Vec<InnerInstructions>>,
41}
42
43#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
44#[serde(rename_all = "camelCase")]
45pub struct TransactionMetadata {
46    pub log_messages: Vec<String>,
47    pub compute_units_consumed: u64,
48    pub return_data: Option<TransactionReturnData>,
49}
50
51#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
52pub struct BanksTransactionResultWithSimulation {
53    pub result: Option<transaction::Result<()>>,
54    pub simulation_details: Option<TransactionSimulationDetails>,
55}
56
57#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
58pub struct BanksTransactionResultWithMetadata {
59    pub result: transaction::Result<()>,
60    pub metadata: Option<TransactionMetadata>,
61}
62
63#[tarpc::service]
64pub trait Banks {
65    async fn send_transaction_with_context(transaction: VersionedTransaction);
66    async fn get_transaction_status_with_context(signature: Signature)
67        -> Option<TransactionStatus>;
68    async fn get_slot_with_context(commitment: CommitmentLevel) -> Slot;
69    async fn get_block_height_with_context(commitment: CommitmentLevel) -> u64;
70    async fn process_transaction_with_preflight_and_commitment_and_context(
71        transaction: VersionedTransaction,
72        commitment: CommitmentLevel,
73    ) -> BanksTransactionResultWithSimulation;
74    async fn process_transaction_with_commitment_and_context(
75        transaction: VersionedTransaction,
76        commitment: CommitmentLevel,
77    ) -> Option<transaction::Result<()>>;
78    async fn process_transaction_with_metadata_and_context(
79        transaction: VersionedTransaction,
80    ) -> BanksTransactionResultWithMetadata;
81    async fn simulate_transaction_with_commitment_and_context(
82        transaction: VersionedTransaction,
83        commitment: CommitmentLevel,
84    ) -> BanksTransactionResultWithSimulation;
85    async fn get_account_with_commitment_and_context(
86        address: Pubkey,
87        commitment: CommitmentLevel,
88    ) -> Option<Account>;
89    async fn get_latest_blockhash_with_context() -> Hash;
90    async fn get_latest_blockhash_with_commitment_and_context(
91        commitment: CommitmentLevel,
92    ) -> Option<(Hash, u64)>;
93    async fn get_fee_for_message_with_commitment_and_context(
94        message: Message,
95        commitment: CommitmentLevel,
96    ) -> Option<u64>;
97}
98
99#[cfg(test)]
100mod tests {
101    use {
102        super::*,
103        tarpc::{client, transport},
104    };
105
106    #[test]
107    fn test_banks_client_new() {
108        let (client_transport, _server_transport) = transport::channel::unbounded();
109        BanksClient::new(client::Config::default(), client_transport);
110    }
111}