From 9a1c1fbab85fe4e2d255565c4148ecc6add1d951 Mon Sep 17 00:00:00 2001 From: Michael Vines Date: Thu, 5 Nov 2020 18:13:01 -0800 Subject: [PATCH] Add get_rent() --- banks-client/src/lib.rs | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/banks-client/src/lib.rs b/banks-client/src/lib.rs index 1aba8bcbd..f185badaa 100644 --- a/banks-client/src/lib.rs +++ b/banks-client/src/lib.rs @@ -10,9 +10,17 @@ use futures::future::join_all; pub use solana_banks_interface::{BanksClient, TransactionStatus}; use solana_banks_interface::{BanksRequest, BanksResponse}; use solana_sdk::{ - account::Account, clock::Slot, commitment_config::CommitmentLevel, - fee_calculator::FeeCalculator, hash::Hash, pubkey::Pubkey, signature::Signature, - transaction::Transaction, transport, + account::{from_account, Account}, + clock::Slot, + commitment_config::CommitmentLevel, + fee_calculator::FeeCalculator, + hash::Hash, + pubkey::Pubkey, + rent::Rent, + signature::Signature, + sysvar, + transaction::Transaction, + transport, }; use std::io::{self, Error, ErrorKind}; use tarpc::{ @@ -40,6 +48,9 @@ pub trait BanksClientExt { /// use them to calculate the transaction fee. async fn get_fees(&mut self) -> io::Result<(FeeCalculator, Hash, Slot)>; + /// Return the cluster rent + async fn get_rent(&mut self) -> io::Result; + /// Send a transaction and return after the transaction has been rejected or /// reached the given level of commitment. async fn process_transaction_with_commitment( @@ -108,6 +119,17 @@ impl BanksClientExt for BanksClient { .await } + async fn get_rent(&mut self) -> io::Result { + let rent_sysvar = self + .get_account(sysvar::rent::id()) + .await? + .ok_or_else(|| io::Error::new(io::ErrorKind::Other, "Rent sysvar not present"))?; + + from_account::(&rent_sysvar).ok_or_else(|| { + io::Error::new(io::ErrorKind::Other, "Failed to deserialize Rent sysvar") + }) + } + async fn get_recent_blockhash(&mut self) -> io::Result { Ok(self.get_fees().await?.1) }