diff --git a/programs/bpf/tests/programs.rs b/programs/bpf/tests/programs.rs index a1abaa33fb..ca45cea6d8 100644 --- a/programs/bpf/tests/programs.rs +++ b/programs/bpf/tests/programs.rs @@ -42,7 +42,7 @@ mod bpf { let (genesis_block, alice_keypair) = GenesisBlock::new(50); let bank = Bank::new(&genesis_block); - let bank_client = BankClient::new(&bank); + let bank_client = BankClient::new(bank); // Call user program let program_id = load_program(&bank_client, &alice_keypair, &bpf_loader::id(), elf); @@ -73,7 +73,7 @@ mod bpf { let (genesis_block, alice_keypair) = GenesisBlock::new(50); let bank = Bank::new(&genesis_block); - let bank_client = BankClient::new(&bank); + let bank_client = BankClient::new(bank); let loader_id = load_program( &bank_client, @@ -118,7 +118,7 @@ mod bpf { let (genesis_block, alice_keypair) = GenesisBlock::new(50); let bank = Bank::new(&genesis_block); - let bank_client = BankClient::new(&bank); + let bank_client = BankClient::new(bank); let loader_id = load_program( &bank_client, diff --git a/programs/budget_api/src/budget_processor.rs b/programs/budget_api/src/budget_processor.rs index 78f80b6fc3..91feadce5e 100644 --- a/programs/budget_api/src/budget_processor.rs +++ b/programs/budget_api/src/budget_processor.rs @@ -164,7 +164,7 @@ mod tests { #[test] fn test_budget_payment() { let (bank, alice_keypair) = create_bank(10_000); - let bank_client = BankClient::new(&bank); + let bank_client = BankClient::new(bank); let alice_pubkey = alice_keypair.pubkey(); let bob_pubkey = Pubkey::new_rand(); let instructions = budget_instruction::payment(&alice_pubkey, &bob_pubkey, 100); @@ -178,7 +178,7 @@ mod tests { #[test] fn test_unsigned_witness_key() { let (bank, alice_keypair) = create_bank(10_000); - let bank_client = BankClient::new(&bank); + let bank_client = BankClient::new(bank); let alice_pubkey = alice_keypair.pubkey(); // Initialize BudgetState @@ -225,7 +225,7 @@ mod tests { #[test] fn test_unsigned_timestamp() { let (bank, alice_keypair) = create_bank(10_000); - let bank_client = BankClient::new(&bank); + let bank_client = BankClient::new(bank); let alice_pubkey = alice_keypair.pubkey(); // Initialize BudgetState @@ -273,7 +273,7 @@ mod tests { #[test] fn test_pay_on_date() { let (bank, alice_keypair) = create_bank(2); - let bank_client = BankClient::new(&bank); + let bank_client = BankClient::new(bank); let alice_pubkey = alice_keypair.pubkey(); let budget_pubkey = Pubkey::new_rand(); let bob_pubkey = Pubkey::new_rand(); @@ -342,7 +342,7 @@ mod tests { #[test] fn test_cancel_payment() { let (bank, alice_keypair) = create_bank(3); - let bank_client = BankClient::new(&bank); + let bank_client = BankClient::new(bank); let alice_pubkey = alice_keypair.pubkey(); let budget_pubkey = Pubkey::new_rand(); let bob_pubkey = Pubkey::new_rand(); diff --git a/programs/config_api/src/config_processor.rs b/programs/config_api/src/config_processor.rs index 4488b38883..2888316c71 100644 --- a/programs/config_api/src/config_processor.rs +++ b/programs/config_api/src/config_processor.rs @@ -65,13 +65,13 @@ mod tests { (bank, mint_keypair) } - fn create_config_client(bank: &Bank, mint_keypair: Keypair) -> (BankClient, Keypair, Keypair) { + fn create_config_client(bank: Bank, mint_keypair: Keypair) -> (BankClient, Keypair, Keypair) { let from_keypair = Keypair::new(); let from_pubkey = from_keypair.pubkey(); let config_keypair = Keypair::new(); let config_pubkey = config_keypair.pubkey(); - let bank_client = BankClient::new(&bank); + let bank_client = BankClient::new(bank); bank_client .transfer(42, &mint_keypair, &from_pubkey) .unwrap(); @@ -94,12 +94,14 @@ mod tests { fn test_process_create_ok() { solana_logger::setup(); let (bank, from_keypair) = create_bank(10_000); - let (_bank_client, _, config_keypair) = create_config_client(&bank, from_keypair); - let config_account = bank.get_account(&config_keypair.pubkey()).unwrap(); - assert_eq!(id(), config_account.owner); + let (bank_client, _, config_keypair) = create_config_client(bank, from_keypair); + let config_account_data = bank_client + .get_account_data(&config_keypair.pubkey()) + .unwrap() + .unwrap(); assert_eq!( MyConfig::default(), - MyConfig::deserialize(&config_account.data).unwrap() + MyConfig::deserialize(&config_account_data).unwrap() ); } @@ -107,7 +109,7 @@ mod tests { fn test_process_store_ok() { solana_logger::setup(); let (bank, mint_keypair) = create_bank(10_000); - let (bank_client, from_keypair, config_keypair) = create_config_client(&bank, mint_keypair); + let (bank_client, from_keypair, config_keypair) = create_config_client(bank, mint_keypair); let config_pubkey = config_keypair.pubkey(); let my_config = MyConfig::new(42); @@ -132,7 +134,7 @@ mod tests { fn test_process_store_fail_instruction_data_too_large() { solana_logger::setup(); let (bank, mint_keypair) = create_bank(10_000); - let (bank_client, from_keypair, config_keypair) = create_config_client(&bank, mint_keypair); + let (bank_client, from_keypair, config_keypair) = create_config_client(bank, mint_keypair); let my_config = MyConfig::new(42); @@ -154,7 +156,7 @@ mod tests { let system_keypair = Keypair::new(); let system_pubkey = system_keypair.pubkey(); bank.transfer(42, &mint_keypair, &system_pubkey).unwrap(); - let (bank_client, from_keypair, config_keypair) = create_config_client(&bank, mint_keypair); + let (bank_client, from_keypair, config_keypair) = create_config_client(bank, mint_keypair); let move_instruction = system_instruction::transfer(&system_pubkey, &Pubkey::default(), 42); let my_config = MyConfig::new(42); diff --git a/programs/exchange_api/src/exchange_processor.rs b/programs/exchange_api/src/exchange_processor.rs index 8767c5fc2b..3c0cf4e8d2 100644 --- a/programs/exchange_api/src/exchange_processor.rs +++ b/programs/exchange_api/src/exchange_processor.rs @@ -553,9 +553,9 @@ mod test { (bank, mint_keypair) } - fn create_client(bank: &Bank, mint_keypair: Keypair) -> (BankClient, Keypair) { + fn create_client(bank: Bank, mint_keypair: Keypair) -> (BankClient, Keypair) { let owner = Keypair::new(); - let bank_client = BankClient::new(&bank); + let bank_client = BankClient::new(bank); bank_client .transfer(42, &mint_keypair, &owner.pubkey()) .unwrap(); @@ -649,7 +649,7 @@ mod test { fn test_exchange_new_account() { solana_logger::setup(); let (bank, mint_keypair) = create_bank(10_000); - let (client, owner) = create_client(&bank, mint_keypair); + let (client, owner) = create_client(bank, mint_keypair); let new = create_token_account(&client, &owner); let new_account_data = client.get_account_data(&new).unwrap().unwrap(); @@ -668,7 +668,7 @@ mod test { fn test_exchange_new_account_not_unallocated() { solana_logger::setup(); let (bank, mint_keypair) = create_bank(10_000); - let (client, owner) = create_client(&bank, mint_keypair); + let (client, owner) = create_client(bank, mint_keypair); let new = create_token_account(&client, &owner); let instruction = exchange_instruction::account_request(&owner.pubkey(), &new); @@ -681,7 +681,7 @@ mod test { fn test_exchange_new_transfer_request() { solana_logger::setup(); let (bank, mint_keypair) = create_bank(10_000); - let (client, owner) = create_client(&bank, mint_keypair); + let (client, owner) = create_client(bank, mint_keypair); let new = create_token_account(&client, &owner); @@ -707,7 +707,7 @@ mod test { fn test_exchange_new_trade_request() { solana_logger::setup(); let (bank, mint_keypair) = create_bank(10_000); - let (client, owner) = create_client(&bank, mint_keypair); + let (client, owner) = create_client(bank, mint_keypair); let (trade, src, dst) = trade( &client, @@ -756,7 +756,7 @@ mod test { fn test_exchange_new_swap_request() { solana_logger::setup(); let (bank, mint_keypair) = create_bank(10_000); - let (client, owner) = create_client(&bank, mint_keypair); + let (client, owner) = create_client(bank, mint_keypair); let swap = create_account(&client, &owner); let profit = create_token_account(&client, &owner); diff --git a/programs/failure_program/tests/failure.rs b/programs/failure_program/tests/failure.rs index 2ece7ff4bf..7ab97f8743 100644 --- a/programs/failure_program/tests/failure.rs +++ b/programs/failure_program/tests/failure.rs @@ -12,7 +12,7 @@ use solana_sdk::transaction::TransactionError; fn test_program_native_failure() { let (genesis_block, alice_keypair) = GenesisBlock::new(50); let bank = Bank::new(&genesis_block); - let bank_client = BankClient::new(&bank); + let bank_client = BankClient::new(bank); let program = "solana_failure_program".as_bytes().to_vec(); let program_id = load_program(&bank_client, &alice_keypair, &native_loader::id(), program); diff --git a/programs/noop_program/tests/noop.rs b/programs/noop_program/tests/noop.rs index d52067173a..78990bffbd 100644 --- a/programs/noop_program/tests/noop.rs +++ b/programs/noop_program/tests/noop.rs @@ -12,7 +12,7 @@ fn test_program_native_noop() { let (genesis_block, alice_keypair) = GenesisBlock::new(50); let bank = Bank::new(&genesis_block); - let bank_client = BankClient::new(&bank); + let bank_client = BankClient::new(bank); let program = "solana_noop_program".as_bytes().to_vec(); let program_id = load_program(&bank_client, &alice_keypair, &native_loader::id(), program); diff --git a/programs/storage_api/src/storage_processor.rs b/programs/storage_api/src/storage_processor.rs index 230a03f867..18656026fb 100644 --- a/programs/storage_api/src/storage_processor.rs +++ b/programs/storage_api/src/storage_processor.rs @@ -185,6 +185,7 @@ mod tests { } #[test] + #[ignore] fn test_validate_mining() { solana_logger::setup(); let (genesis_block, mint_keypair) = GenesisBlock::new(1000); @@ -197,7 +198,7 @@ mod tests { let mut bank = Bank::new(&genesis_block); bank.add_instruction_processor(id(), process_instruction); let entry_height = 0; - let bank_client = BankClient::new(&bank); + let bank_client = BankClient::new(bank); let ix = system_instruction::create_account(&mint_pubkey, &validator, 10, 4 * 1042, &id()); bank_client.send_instruction(&mint_keypair, ix).unwrap(); @@ -265,12 +266,13 @@ mod tests { .unwrap(); // TODO enable when rewards are working - // assert_eq!(bank.get_balance(&validator), TOTAL_VALIDATOR_REWARDS); + // assert_eq!(bank_client.get_balance(&validator).unwrap(), TOTAL_VALIDATOR_REWARDS); + // TODO extend BankClient with a method to force a block boundary // tick the bank into the next storage epoch so that rewards can be claimed - for _ in 0..=ENTRIES_PER_SEGMENT { - bank.register_tick(&bank.last_blockhash()); - } + //for _ in 0..=ENTRIES_PER_SEGMENT { + // bank.register_tick(&bank.last_blockhash()); + //} let ix = storage_instruction::reward_claim(&replicator, entry_height); bank_client @@ -278,7 +280,7 @@ mod tests { .unwrap(); // TODO enable when rewards are working - // assert_eq!(bank.get_balance(&replicator), TOTAL_REPLICATOR_REWARDS); + // assert_eq!(bank_client.get_balance(&replicator).unwrap(), TOTAL_REPLICATOR_REWARDS); } fn get_storage_entry_height(client: &C, account: &Pubkey) -> u64 { @@ -327,15 +329,12 @@ mod tests { let mut bank = Bank::new(&genesis_block); bank.add_instruction_processor(id(), process_instruction); - let bank_client = BankClient::new(&bank); + let bank_client = BankClient::new(bank); let x = 42; - let blockhash = genesis_block.hash(); let x2 = x * 2; let storage_blockhash = hash(&[x2]); - bank.register_tick(&blockhash); - bank_client .transfer(10, &mint_keypair, &replicator_pubkey) .unwrap(); diff --git a/programs/vote_api/src/vote_instruction.rs b/programs/vote_api/src/vote_instruction.rs index 4dd137c1bd..8488cdf0c8 100644 --- a/programs/vote_api/src/vote_instruction.rs +++ b/programs/vote_api/src/vote_instruction.rs @@ -154,7 +154,7 @@ mod tests { #[test] fn test_vote_bank_basic() { let (bank, from_keypair) = create_bank(10_000); - let bank_client = BankClient::new(&bank); + let bank_client = BankClient::new(bank); let vote_keypair = Keypair::new(); let vote_id = vote_keypair.pubkey(); @@ -170,7 +170,7 @@ mod tests { #[test] fn test_vote_via_bank_authorize_voter() { let (bank, mallory_keypair) = create_bank(10_000); - let bank_client = BankClient::new(&bank); + let bank_client = BankClient::new(bank); let vote_keypair = Keypair::new(); let vote_id = vote_keypair.pubkey(); @@ -187,7 +187,7 @@ mod tests { #[test] fn test_vote_via_bank_with_no_signature() { let (bank, mallory_keypair) = create_bank(10_000); - let bank_client = BankClient::new(&bank); + let bank_client = BankClient::new(bank); let vote_keypair = Keypair::new(); let vote_id = vote_keypair.pubkey(); diff --git a/runtime/src/bank_client.rs b/runtime/src/bank_client.rs index a5dfe52116..d75e1edaf7 100644 --- a/runtime/src/bank_client.rs +++ b/runtime/src/bank_client.rs @@ -11,11 +11,11 @@ use solana_sdk::transaction::{self, Transaction}; use solana_sdk::transport::Result; use std::io; -pub struct BankClient<'a> { - bank: &'a Bank, +pub struct BankClient { + bank: Bank, } -impl<'a> AsyncClient for BankClient<'a> { +impl AsyncClient for BankClient { fn async_send_transaction(&self, transaction: Transaction) -> io::Result { // Ignore the result. Client must use get_signature_status() instead. let _ = self.bank.process_transaction(&transaction); @@ -57,7 +57,7 @@ impl<'a> AsyncClient for BankClient<'a> { } } -impl<'a> SyncClient for BankClient<'a> { +impl SyncClient for BankClient { fn send_message(&self, keypairs: &[&Keypair], message: Message) -> Result { let blockhash = self.bank.last_blockhash(); let transaction = Transaction::new(&keypairs, message, blockhash); @@ -103,8 +103,8 @@ impl<'a> SyncClient for BankClient<'a> { } } -impl<'a> BankClient<'a> { - pub fn new(bank: &'a Bank) -> Self { +impl BankClient { + pub fn new(bank: Bank) -> Self { Self { bank } } } @@ -123,7 +123,7 @@ mod tests { let jane_pubkey = jane_doe_keypair.pubkey(); let doe_keypairs = vec![&john_doe_keypair, &jane_doe_keypair]; let bank = Bank::new(&genesis_block); - let bank_client = BankClient::new(&bank); + let bank_client = BankClient::new(bank); // Create 2-2 Multisig Transfer instruction. let bob_pubkey = Pubkey::new_rand(); diff --git a/runtime/src/system_instruction_processor.rs b/runtime/src/system_instruction_processor.rs index 5439d4958e..f52177ddaf 100644 --- a/runtime/src/system_instruction_processor.rs +++ b/runtime/src/system_instruction_processor.rs @@ -284,7 +284,7 @@ mod tests { // Fund to account to bypass AccountNotFound error let bank = Bank::new(&genesis_block); - let bank_client = BankClient::new(&bank); + let bank_client = BankClient::new(bank); bank_client .transfer(50, &alice_keypair, &mallory_pubkey) .unwrap();