Add get_balance() and get_account_data() to SyncClient
Migrate tests to use them.
This commit is contained in:
@ -2,6 +2,7 @@ use crate::bank::Bank;
|
||||
use solana_sdk::instruction::Instruction;
|
||||
use solana_sdk::message::Message;
|
||||
use solana_sdk::pubkey::Pubkey;
|
||||
use solana_sdk::signature::Signature;
|
||||
use solana_sdk::signature::{Keypair, KeypairUtil};
|
||||
use solana_sdk::sync_client::SyncClient;
|
||||
use solana_sdk::system_instruction;
|
||||
@ -16,10 +17,11 @@ impl<'a> SyncClient for BankClient<'a> {
|
||||
&self,
|
||||
keypairs: &[&Keypair],
|
||||
message: Message,
|
||||
) -> Result<(), TransactionError> {
|
||||
) -> Result<Signature, TransactionError> {
|
||||
let blockhash = self.bank.last_blockhash();
|
||||
let transaction = Transaction::new(&keypairs, message, blockhash);
|
||||
self.bank.process_transaction(&transaction)
|
||||
self.bank.process_transaction(&transaction)?;
|
||||
Ok(transaction.signatures.get(0).cloned().unwrap_or_default())
|
||||
}
|
||||
|
||||
/// Create and process a transaction from a single instruction.
|
||||
@ -27,7 +29,7 @@ impl<'a> SyncClient for BankClient<'a> {
|
||||
&self,
|
||||
keypair: &Keypair,
|
||||
instruction: Instruction,
|
||||
) -> Result<(), TransactionError> {
|
||||
) -> Result<Signature, TransactionError> {
|
||||
let message = Message::new(vec![instruction]);
|
||||
self.send_message(&[keypair], message)
|
||||
}
|
||||
@ -38,10 +40,19 @@ impl<'a> SyncClient for BankClient<'a> {
|
||||
lamports: u64,
|
||||
keypair: &Keypair,
|
||||
pubkey: &Pubkey,
|
||||
) -> Result<(), TransactionError> {
|
||||
) -> Result<Signature, TransactionError> {
|
||||
let move_instruction = system_instruction::transfer(&keypair.pubkey(), pubkey, lamports);
|
||||
self.send_instruction(keypair, move_instruction)
|
||||
}
|
||||
|
||||
fn get_account_data(&self, pubkey: &Pubkey) -> Option<Vec<u8>> {
|
||||
let account = self.bank.get_account(pubkey)?;
|
||||
Some(account.data)
|
||||
}
|
||||
|
||||
fn get_balance(&self, pubkey: &Pubkey) -> u64 {
|
||||
self.bank.get_balance(pubkey)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> BankClient<'a> {
|
||||
@ -75,6 +86,6 @@ mod tests {
|
||||
|
||||
let message = Message::new(vec![move_instruction]);
|
||||
bank_client.send_message(&doe_keypairs, message).unwrap();
|
||||
assert_eq!(bank.get_balance(&bob_pubkey), 42);
|
||||
assert_eq!(bank_client.get_balance(&bob_pubkey), 42);
|
||||
}
|
||||
}
|
||||
|
@ -307,7 +307,7 @@ mod tests {
|
||||
InstructionError::MissingRequiredSignature
|
||||
))
|
||||
);
|
||||
assert_eq!(bank.get_balance(&alice_pubkey), 50);
|
||||
assert_eq!(bank.get_balance(&mallory_pubkey), 50);
|
||||
assert_eq!(bank_client.get_balance(&alice_pubkey), 50);
|
||||
assert_eq!(bank_client.get_balance(&mallory_pubkey), 50);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user