Add SyncClient and use from BankClient
This commit is contained in:
@ -3,6 +3,7 @@ use solana_sdk::instruction::Instruction;
|
||||
use solana_sdk::message::Message;
|
||||
use solana_sdk::pubkey::Pubkey;
|
||||
use solana_sdk::signature::{Keypair, KeypairUtil};
|
||||
use solana_sdk::sync_client::SyncClient;
|
||||
use solana_sdk::system_instruction;
|
||||
use solana_sdk::transaction::{Transaction, TransactionError};
|
||||
|
||||
@ -10,12 +11,8 @@ pub struct BankClient<'a> {
|
||||
bank: &'a Bank,
|
||||
}
|
||||
|
||||
impl<'a> BankClient<'a> {
|
||||
pub fn new(bank: &'a Bank) -> Self {
|
||||
Self { bank }
|
||||
}
|
||||
|
||||
pub fn process_message(
|
||||
impl<'a> SyncClient for BankClient<'a> {
|
||||
fn send_message(
|
||||
&self,
|
||||
keypairs: &[&Keypair],
|
||||
message: Message,
|
||||
@ -26,24 +23,30 @@ impl<'a> BankClient<'a> {
|
||||
}
|
||||
|
||||
/// Create and process a transaction from a single instruction.
|
||||
pub fn process_instruction(
|
||||
fn send_instruction(
|
||||
&self,
|
||||
keypair: &Keypair,
|
||||
instruction: Instruction,
|
||||
) -> Result<(), TransactionError> {
|
||||
let message = Message::new(vec![instruction]);
|
||||
self.process_message(&[keypair], message)
|
||||
self.send_message(&[keypair], message)
|
||||
}
|
||||
|
||||
/// Transfer `lamports` from `keypair` to `pubkey`
|
||||
pub fn transfer(
|
||||
fn transfer(
|
||||
&self,
|
||||
lamports: u64,
|
||||
keypair: &Keypair,
|
||||
pubkey: &Pubkey,
|
||||
) -> Result<(), TransactionError> {
|
||||
let move_instruction = system_instruction::transfer(&keypair.pubkey(), pubkey, lamports);
|
||||
self.process_instruction(keypair, move_instruction)
|
||||
self.send_instruction(keypair, move_instruction)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> BankClient<'a> {
|
||||
pub fn new(bank: &'a Bank) -> Self {
|
||||
Self { bank }
|
||||
}
|
||||
}
|
||||
|
||||
@ -71,7 +74,7 @@ mod tests {
|
||||
.push(AccountMeta::new(jane_pubkey, true));
|
||||
|
||||
let message = Message::new(vec![move_instruction]);
|
||||
bank_client.process_message(&doe_keypairs, message).unwrap();
|
||||
bank_client.send_message(&doe_keypairs, message).unwrap();
|
||||
assert_eq!(bank.get_balance(&bob_pubkey), 42);
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ use solana_sdk::instruction::{AccountMeta, Instruction};
|
||||
use solana_sdk::loader_instruction;
|
||||
use solana_sdk::pubkey::Pubkey;
|
||||
use solana_sdk::signature::{Keypair, KeypairUtil};
|
||||
use solana_sdk::sync_client::SyncClient;
|
||||
use solana_sdk::system_instruction;
|
||||
|
||||
pub fn load_program(
|
||||
@ -23,7 +24,7 @@ pub fn load_program(
|
||||
loader_id,
|
||||
);
|
||||
bank_client
|
||||
.process_instruction(&from_keypair, instruction)
|
||||
.send_instruction(&from_keypair, instruction)
|
||||
.unwrap();
|
||||
|
||||
let chunk_size = 256; // Size of chunk just needs to fit into tx
|
||||
@ -32,14 +33,14 @@ pub fn load_program(
|
||||
let instruction =
|
||||
loader_instruction::write(&program_pubkey, loader_id, offset, chunk.to_vec());
|
||||
bank_client
|
||||
.process_instruction(&program_keypair, instruction)
|
||||
.send_instruction(&program_keypair, instruction)
|
||||
.unwrap();
|
||||
offset += chunk_size as u32;
|
||||
}
|
||||
|
||||
let instruction = loader_instruction::finalize(&program_pubkey, loader_id);
|
||||
bank_client
|
||||
.process_instruction(&program_keypair, instruction)
|
||||
.send_instruction(&program_keypair, instruction)
|
||||
.unwrap();
|
||||
|
||||
program_pubkey
|
||||
|
@ -110,6 +110,7 @@ mod tests {
|
||||
use solana_sdk::genesis_block::GenesisBlock;
|
||||
use solana_sdk::instruction::{AccountMeta, Instruction, InstructionError};
|
||||
use solana_sdk::signature::{Keypair, KeypairUtil};
|
||||
use solana_sdk::sync_client::SyncClient;
|
||||
use solana_sdk::system_program;
|
||||
use solana_sdk::transaction::TransactionError;
|
||||
|
||||
@ -300,7 +301,7 @@ mod tests {
|
||||
account_metas,
|
||||
);
|
||||
assert_eq!(
|
||||
bank_client.process_instruction(&mallory_keypair, malicious_instruction),
|
||||
bank_client.send_instruction(&mallory_keypair, malicious_instruction),
|
||||
Err(TransactionError::InstructionError(
|
||||
0,
|
||||
InstructionError::MissingRequiredSignature
|
||||
|
Reference in New Issue
Block a user