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