Expose last-valid-slot to BankClient and ThinClient users (#10478)
automerge
This commit is contained in:
@ -160,7 +160,7 @@ fn distribute_tokens<T: Client>(
|
||||
let fee_payer_pubkey = args.fee_payer.pubkey();
|
||||
let message = Message::new_with_payer(&instructions, Some(&fee_payer_pubkey));
|
||||
match client.send_message(message, &signers) {
|
||||
Ok(transaction) => {
|
||||
Ok((transaction, _last_valid_slot)) => {
|
||||
db::set_transaction_info(
|
||||
db,
|
||||
&allocation.recipient.parse().unwrap(),
|
||||
@ -411,7 +411,7 @@ use tempfile::{tempdir, NamedTempFile};
|
||||
pub fn test_process_distribute_tokens_with_client<C: Client>(client: C, sender_keypair: Keypair) {
|
||||
let thin_client = ThinClient::new(client, false);
|
||||
let fee_payer = Keypair::new();
|
||||
let transaction = thin_client
|
||||
let (transaction, _last_valid_slot) = thin_client
|
||||
.transfer(sol_to_lamports(1.0), &sender_keypair, &fee_payer.pubkey())
|
||||
.unwrap();
|
||||
thin_client
|
||||
@ -486,7 +486,7 @@ pub fn test_process_distribute_tokens_with_client<C: Client>(client: C, sender_k
|
||||
pub fn test_process_distribute_stake_with_client<C: Client>(client: C, sender_keypair: Keypair) {
|
||||
let thin_client = ThinClient::new(client, false);
|
||||
let fee_payer = Keypair::new();
|
||||
let transaction = thin_client
|
||||
let (transaction, _last_valid_slot) = thin_client
|
||||
.transfer(sol_to_lamports(1.0), &sender_keypair, &fee_payer.pubkey())
|
||||
.unwrap();
|
||||
thin_client
|
||||
|
@ -3,6 +3,8 @@ use solana_runtime::bank_client::BankClient;
|
||||
use solana_sdk::{
|
||||
account::Account,
|
||||
client::{AsyncClient, SyncClient},
|
||||
clock::Slot,
|
||||
commitment_config::CommitmentConfig,
|
||||
fee_calculator::FeeCalculator,
|
||||
hash::Hash,
|
||||
message::Message,
|
||||
@ -26,7 +28,7 @@ pub trait Client {
|
||||
signatures: &[Signature],
|
||||
) -> Result<Vec<Option<TransactionStatus>>>;
|
||||
fn get_balance1(&self, pubkey: &Pubkey) -> Result<u64>;
|
||||
fn get_recent_blockhash1(&self) -> Result<(Hash, FeeCalculator)>;
|
||||
fn get_fees1(&self) -> Result<(Hash, FeeCalculator, Slot)>;
|
||||
fn get_account1(&self, pubkey: &Pubkey) -> Result<Option<Account>>;
|
||||
}
|
||||
|
||||
@ -55,9 +57,11 @@ impl Client for RpcClient {
|
||||
.map_err(|e| TransportError::Custom(e.to_string()))
|
||||
}
|
||||
|
||||
fn get_recent_blockhash1(&self) -> Result<(Hash, FeeCalculator)> {
|
||||
self.get_recent_blockhash()
|
||||
.map_err(|e| TransportError::Custom(e.to_string()))
|
||||
fn get_fees1(&self) -> Result<(Hash, FeeCalculator, Slot)> {
|
||||
let result = self
|
||||
.get_recent_blockhash_with_commitment(CommitmentConfig::default())
|
||||
.map_err(|e| TransportError::Custom(e.to_string()))?;
|
||||
Ok(result.value)
|
||||
}
|
||||
|
||||
fn get_account1(&self, pubkey: &Pubkey) -> Result<Option<Account>> {
|
||||
@ -95,8 +99,8 @@ impl Client for BankClient {
|
||||
self.get_balance(pubkey)
|
||||
}
|
||||
|
||||
fn get_recent_blockhash1(&self) -> Result<(Hash, FeeCalculator)> {
|
||||
self.get_recent_blockhash()
|
||||
fn get_fees1(&self) -> Result<(Hash, FeeCalculator, Slot)> {
|
||||
self.get_recent_blockhash_with_commitment(CommitmentConfig::default())
|
||||
}
|
||||
|
||||
fn get_account1(&self, pubkey: &Pubkey) -> Result<Option<Account>> {
|
||||
@ -135,14 +139,19 @@ impl<C: Client> ThinClient<C> {
|
||||
self.client.get_signature_statuses1(signatures)
|
||||
}
|
||||
|
||||
pub fn send_message<S: Signers>(&self, message: Message, signers: &S) -> Result<Transaction> {
|
||||
pub fn send_message<S: Signers>(
|
||||
&self,
|
||||
message: Message,
|
||||
signers: &S,
|
||||
) -> Result<(Transaction, Slot)> {
|
||||
if self.dry_run {
|
||||
return Ok(Transaction::new_unsigned(message));
|
||||
return Ok((Transaction::new_unsigned(message), std::u64::MAX));
|
||||
}
|
||||
let (blockhash, _fee_caluclator) = self.get_recent_blockhash()?;
|
||||
let (blockhash, _fee_caluclator, last_valid_slot) = self.get_fees()?;
|
||||
|
||||
let transaction = Transaction::new(signers, message, blockhash);
|
||||
self.send_transaction(transaction.clone())?;
|
||||
Ok(transaction)
|
||||
Ok((transaction, last_valid_slot))
|
||||
}
|
||||
|
||||
pub fn transfer<S: Signer>(
|
||||
@ -150,15 +159,15 @@ impl<C: Client> ThinClient<C> {
|
||||
lamports: u64,
|
||||
sender_keypair: &S,
|
||||
to_pubkey: &Pubkey,
|
||||
) -> Result<Transaction> {
|
||||
) -> Result<(Transaction, u64)> {
|
||||
let create_instruction =
|
||||
system_instruction::transfer(&sender_keypair.pubkey(), &to_pubkey, lamports);
|
||||
let message = Message::new(&[create_instruction]);
|
||||
self.send_message(message, &[sender_keypair])
|
||||
}
|
||||
|
||||
pub fn get_recent_blockhash(&self) -> Result<(Hash, FeeCalculator)> {
|
||||
self.client.get_recent_blockhash1()
|
||||
pub fn get_fees(&self) -> Result<(Hash, FeeCalculator, Slot)> {
|
||||
self.client.get_fees1()
|
||||
}
|
||||
|
||||
pub fn get_balance(&self, pubkey: &Pubkey) -> Result<u64> {
|
||||
|
Reference in New Issue
Block a user