solana_banks_interface/
lib.rs1#![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>, 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}