gemachain_banks_interface/
lib.rs1use {
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>, 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}