2021-10-28 16:00:09 -07:00
|
|
|
#![allow(deprecated)]
|
|
|
|
|
2021-08-23 15:32:15 -07:00
|
|
|
use {
|
|
|
|
serde::{Deserialize, Serialize},
|
|
|
|
solana_sdk::{
|
|
|
|
account::Account,
|
|
|
|
clock::Slot,
|
|
|
|
commitment_config::CommitmentLevel,
|
|
|
|
fee_calculator::FeeCalculator,
|
|
|
|
hash::Hash,
|
2021-10-28 16:00:09 -07:00
|
|
|
message::Message,
|
2021-08-23 15:32:15 -07:00
|
|
|
pubkey::Pubkey,
|
|
|
|
signature::Signature,
|
|
|
|
transaction::{self, Transaction, TransactionError},
|
2022-03-22 15:17:05 -07:00
|
|
|
transaction_context::TransactionReturnData,
|
2021-08-23 15:32:15 -07:00
|
|
|
},
|
2020-08-07 07:45:17 -07:00
|
|
|
};
|
|
|
|
|
2021-01-15 08:05:05 -08:00
|
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
pub enum TransactionConfirmationStatus {
|
|
|
|
Processed,
|
|
|
|
Confirmed,
|
|
|
|
Finalized,
|
|
|
|
}
|
|
|
|
|
2020-08-07 07:45:17 -07:00
|
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
pub struct TransactionStatus {
|
|
|
|
pub slot: Slot,
|
|
|
|
pub confirmations: Option<usize>, // None = rooted
|
|
|
|
pub err: Option<TransactionError>,
|
2021-01-15 08:05:05 -08:00
|
|
|
pub confirmation_status: Option<TransactionConfirmationStatus>,
|
2020-08-07 07:45:17 -07:00
|
|
|
}
|
|
|
|
|
2021-12-28 11:25:46 -08:00
|
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
#[serde(rename_all = "camelCase")]
|
|
|
|
pub struct TransactionSimulationDetails {
|
|
|
|
pub logs: Vec<String>,
|
|
|
|
pub units_consumed: u64,
|
2022-03-22 15:17:05 -07:00
|
|
|
pub return_data: Option<TransactionReturnData>,
|
2021-12-28 11:25:46 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
pub struct BanksTransactionResultWithSimulation {
|
|
|
|
pub result: Option<transaction::Result<()>>,
|
|
|
|
pub simulation_details: Option<TransactionSimulationDetails>,
|
|
|
|
}
|
|
|
|
|
2020-08-07 07:45:17 -07:00
|
|
|
#[tarpc::service]
|
|
|
|
pub trait Banks {
|
|
|
|
async fn send_transaction_with_context(transaction: Transaction);
|
2021-10-28 16:00:09 -07:00
|
|
|
#[deprecated(
|
|
|
|
since = "1.9.0",
|
|
|
|
note = "Please use `get_fee_for_message_with_commitment_and_context` instead"
|
|
|
|
)]
|
2020-08-07 07:45:17 -07:00
|
|
|
async fn get_fees_with_commitment_and_context(
|
|
|
|
commitment: CommitmentLevel,
|
|
|
|
) -> (FeeCalculator, Hash, Slot);
|
|
|
|
async fn get_transaction_status_with_context(signature: Signature)
|
|
|
|
-> Option<TransactionStatus>;
|
|
|
|
async fn get_slot_with_context(commitment: CommitmentLevel) -> Slot;
|
2021-08-11 00:04:00 -07:00
|
|
|
async fn get_block_height_with_context(commitment: CommitmentLevel) -> u64;
|
2021-12-28 11:25:46 -08:00
|
|
|
async fn process_transaction_with_preflight_and_commitment_and_context(
|
|
|
|
transaction: Transaction,
|
|
|
|
commitment: CommitmentLevel,
|
|
|
|
) -> BanksTransactionResultWithSimulation;
|
2020-08-07 07:45:17 -07:00
|
|
|
async fn process_transaction_with_commitment_and_context(
|
|
|
|
transaction: Transaction,
|
|
|
|
commitment: CommitmentLevel,
|
|
|
|
) -> Option<transaction::Result<()>>;
|
|
|
|
async fn get_account_with_commitment_and_context(
|
|
|
|
address: Pubkey,
|
|
|
|
commitment: CommitmentLevel,
|
|
|
|
) -> Option<Account>;
|
2021-11-02 16:38:23 -07:00
|
|
|
async fn get_latest_blockhash_with_context() -> Hash;
|
|
|
|
async fn get_latest_blockhash_with_commitment_and_context(
|
|
|
|
commitment: CommitmentLevel,
|
|
|
|
) -> Option<(Hash, u64)>;
|
2021-10-28 16:00:09 -07:00
|
|
|
async fn get_fee_for_message_with_commitment_and_context(
|
|
|
|
commitment: CommitmentLevel,
|
|
|
|
message: Message,
|
|
|
|
) -> Option<u64>;
|
2020-08-07 07:45:17 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
mod tests {
|
2021-12-03 09:00:31 -08:00
|
|
|
use {
|
|
|
|
super::*,
|
|
|
|
tarpc::{client, transport},
|
|
|
|
};
|
2020-08-07 07:45:17 -07:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_banks_client_new() {
|
|
|
|
let (client_transport, _server_transport) = transport::channel::unbounded();
|
|
|
|
BanksClient::new(client::Config::default(), client_transport);
|
|
|
|
}
|
|
|
|
}
|