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