gemachain_banks_interface/
lib.rs

1use {
2    serde::{Deserialize, Serialize},
3    gemachain_sdk::{
4        account::Account,
5        clock::Slot,
6        commitment_config::CommitmentLevel,
7        fee_calculator::FeeCalculator,
8        hash::Hash,
9        pubkey::Pubkey,
10        signature::Signature,
11        transaction::{self, Transaction, TransactionError},
12    },
13};
14
15#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
16pub enum TransactionConfirmationStatus {
17    Processed,
18    Confirmed,
19    Finalized,
20}
21
22#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
23pub struct TransactionStatus {
24    pub slot: Slot,
25    pub confirmations: Option<usize>, // None = rooted
26    pub err: Option<TransactionError>,
27    pub confirmation_status: Option<TransactionConfirmationStatus>,
28}
29
30#[tarpc::service]
31pub trait Banks {
32    async fn send_transaction_with_context(transaction: Transaction);
33    async fn get_fees_with_commitment_and_context(
34        commitment: CommitmentLevel,
35    ) -> (FeeCalculator, Hash, Slot);
36    async fn get_transaction_status_with_context(signature: Signature)
37        -> Option<TransactionStatus>;
38    async fn get_slot_with_context(commitment: CommitmentLevel) -> Slot;
39    async fn get_block_height_with_context(commitment: CommitmentLevel) -> u64;
40    async fn process_transaction_with_commitment_and_context(
41        transaction: Transaction,
42        commitment: CommitmentLevel,
43    ) -> Option<transaction::Result<()>>;
44    async fn get_account_with_commitment_and_context(
45        address: Pubkey,
46        commitment: CommitmentLevel,
47    ) -> Option<Account>;
48}
49
50#[cfg(test)]
51mod tests {
52    use super::*;
53    use tarpc::{client, transport};
54
55    #[test]
56    fn test_banks_client_new() {
57        let (client_transport, _server_transport) = transport::channel::unbounded();
58        BanksClient::new(client::Config::default(), client_transport);
59    }
60}