miraland_banks_interface/
lib.rs

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