diff --git a/src/bank.rs b/src/bank.rs index fa309ff37c..042e61a4cd 100644 --- a/src/bank.rs +++ b/src/bank.rs @@ -950,7 +950,6 @@ mod tests { use super::*; use crate::entry::{next_entries, next_entry, Entry}; use crate::gen_keys::GenKeys; - use crate::genesis_block::BOOTSTRAP_LEADER_TOKENS; use bincode::serialize; use hashbrown::HashSet; use solana_sdk::hash::hash; @@ -968,16 +967,13 @@ mod tests { fn test_bank_new() { let (genesis_block, _) = GenesisBlock::new(10_000); let bank = Bank::new(&genesis_block); - assert_eq!( - bank.get_balance(&genesis_block.mint_id), - 10_000 - genesis_block.bootstrap_leader_tokens - ); + assert_eq!(bank.get_balance(&genesis_block.mint_id), 10_000); } #[test] fn test_bank_new_with_leader() { let dummy_leader_id = Keypair::new().pubkey(); - let dummy_leader_tokens = BOOTSTRAP_LEADER_TOKENS; + let dummy_leader_tokens = crate::genesis_block::BOOTSTRAP_LEADER_TOKENS; let (genesis_block, _) = GenesisBlock::new_with_leader(10_000, dummy_leader_id, dummy_leader_tokens); assert_eq!(genesis_block.bootstrap_leader_tokens, dummy_leader_tokens); @@ -1011,7 +1007,7 @@ mod tests { #[test] fn test_one_source_two_tx_one_batch() { - let (genesis_block, mint_keypair) = GenesisBlock::new(1 + BOOTSTRAP_LEADER_TOKENS); + let (genesis_block, mint_keypair) = GenesisBlock::new(1); let key1 = Keypair::new().pubkey(); let key2 = Keypair::new().pubkey(); let bank = Bank::new(&genesis_block); @@ -1036,7 +1032,7 @@ mod tests { #[test] fn test_one_tx_two_out_atomic_fail() { - let (genesis_block, mint_keypair) = GenesisBlock::new(1 + BOOTSTRAP_LEADER_TOKENS); + let (genesis_block, mint_keypair) = GenesisBlock::new(1); let key1 = Keypair::new().pubkey(); let key2 = Keypair::new().pubkey(); let bank = Bank::new(&genesis_block); @@ -1085,7 +1081,7 @@ mod tests { #[test] fn test_one_tx_two_out_atomic_pass() { - let (genesis_block, mint_keypair) = GenesisBlock::new(2 + BOOTSTRAP_LEADER_TOKENS); + let (genesis_block, mint_keypair) = GenesisBlock::new(2); let key1 = Keypair::new().pubkey(); let key2 = Keypair::new().pubkey(); let bank = Bank::new(&genesis_block); @@ -1108,7 +1104,7 @@ mod tests { // See github issue 1157 (https://github.com/solana-labs/solana/issues/1157) #[test] fn test_detect_failed_duplicate_transactions_issue_1157() { - let (genesis_block, mint_keypair) = GenesisBlock::new(2 + BOOTSTRAP_LEADER_TOKENS); + let (genesis_block, mint_keypair) = GenesisBlock::new(2); let bank = Bank::new(&genesis_block); let dest = Keypair::new(); @@ -1144,7 +1140,7 @@ mod tests { #[test] fn test_account_not_found() { - let (genesis_block, mint_keypair) = GenesisBlock::new(BOOTSTRAP_LEADER_TOKENS); + let (genesis_block, mint_keypair) = GenesisBlock::new(0); let bank = Bank::new(&genesis_block); let keypair = Keypair::new(); assert_eq!( @@ -1156,7 +1152,7 @@ mod tests { #[test] fn test_insufficient_funds() { - let (genesis_block, mint_keypair) = GenesisBlock::new(11_000 + BOOTSTRAP_LEADER_TOKENS); + let (genesis_block, mint_keypair) = GenesisBlock::new(11_000); let bank = Bank::new(&genesis_block); let pubkey = Keypair::new().pubkey(); bank.transfer(1_000, &mint_keypair, pubkey, genesis_block.last_id()) @@ -1189,7 +1185,7 @@ mod tests { #[test] fn test_debits_before_credits() { - let (genesis_block, mint_keypair) = GenesisBlock::new(2 + BOOTSTRAP_LEADER_TOKENS); + let (genesis_block, mint_keypair) = GenesisBlock::new(2); let bank = Bank::new(&genesis_block); let keypair = Keypair::new(); let tx0 = SystemTransaction::new_account( @@ -1216,7 +1212,7 @@ mod tests { #[test] fn test_process_empty_entry_is_registered() { - let (genesis_block, mint_keypair) = GenesisBlock::new(2 + BOOTSTRAP_LEADER_TOKENS); + let (genesis_block, mint_keypair) = GenesisBlock::new(2); let bank = Bank::new(&genesis_block); let keypair = Keypair::new(); let entry = next_entry(&genesis_block.last_id(), 1, vec![]); @@ -1323,15 +1319,7 @@ mod tests { tokens: u64, num_one_token_transfers: usize, ) -> (GenesisBlock, Keypair, impl Iterator) { - let mint_keypair = Keypair::new(); - let bootstrap_leader_vote_account_keypair = Keypair::new(); - let genesis_block = GenesisBlock { - bootstrap_leader_id: Keypair::new().pubkey(), - bootstrap_leader_tokens: BOOTSTRAP_LEADER_TOKENS, - bootstrap_leader_vote_account_id: bootstrap_leader_vote_account_keypair.pubkey(), - mint_id: mint_keypair.pubkey(), - tokens, - }; + let (genesis_block, mint_keypair) = GenesisBlock::new(tokens); let block = create_sample_block_with_ticks( &genesis_block, &mint_keypair, @@ -1343,8 +1331,7 @@ mod tests { #[test] fn test_process_ledger_simple() { - let (genesis_block, mint_keypair, ledger) = - create_sample_ledger(100 + BOOTSTRAP_LEADER_TOKENS, 3); + let (genesis_block, mint_keypair, ledger) = create_sample_ledger(100, 3); let mut bank = Bank::default(); bank.add_builtin_programs(); bank.process_genesis_block(&genesis_block); @@ -1363,15 +1350,7 @@ mod tests { #[test] fn test_hash_internal_state() { - let mint_keypair = Keypair::new(); - let bootstrap_leader_vote_account_keypair = Keypair::new(); - let genesis_block = GenesisBlock { - bootstrap_leader_id: Keypair::new().pubkey(), - bootstrap_leader_tokens: BOOTSTRAP_LEADER_TOKENS, - bootstrap_leader_vote_account_id: bootstrap_leader_vote_account_keypair.pubkey(), - mint_id: mint_keypair.pubkey(), - tokens: 2_000, - }; + let (genesis_block, mint_keypair) = GenesisBlock::new(2_000); let seed = [0u8; 32]; let mut rnd = GenKeys::new(seed); let keypairs = rnd.gen_n_keypairs(5); @@ -1418,7 +1397,7 @@ mod tests { } #[test] fn test_interleaving_locks() { - let (genesis_block, mint_keypair) = GenesisBlock::new(3 + BOOTSTRAP_LEADER_TOKENS); + let (genesis_block, mint_keypair) = GenesisBlock::new(3); let bank = Bank::new(&genesis_block); let alice = Keypair::new(); let bob = Keypair::new(); @@ -1870,7 +1849,7 @@ mod tests { } #[test] fn test_bank_pay_to_self() { - let (genesis_block, mint_keypair) = GenesisBlock::new(1 + BOOTSTRAP_LEADER_TOKENS); + let (genesis_block, mint_keypair) = GenesisBlock::new(1); let key1 = Keypair::new(); let bank = Bank::new(&genesis_block); diff --git a/src/banking_stage.rs b/src/banking_stage.rs index 86cda6b51b..55519a662d 100644 --- a/src/banking_stage.rs +++ b/src/banking_stage.rs @@ -278,7 +278,7 @@ mod tests { use crate::bank::Bank; use crate::banking_stage::BankingStageReturnType; use crate::entry::EntrySlice; - use crate::genesis_block::{GenesisBlock, BOOTSTRAP_LEADER_TOKENS}; + use crate::genesis_block::GenesisBlock; use crate::packet::to_packets; use solana_sdk::signature::{Keypair, KeypairUtil}; use solana_sdk::system_transaction::SystemTransaction; @@ -286,7 +286,7 @@ mod tests { #[test] fn test_banking_stage_shutdown1() { - let (genesis_block, _mint_keypair) = GenesisBlock::new(2 + BOOTSTRAP_LEADER_TOKENS); + let (genesis_block, _mint_keypair) = GenesisBlock::new(2); let bank = Arc::new(Bank::new(&genesis_block)); let (verified_sender, verified_receiver) = channel(); let (to_validator_sender, _) = channel(); @@ -308,7 +308,7 @@ mod tests { #[test] fn test_banking_stage_shutdown2() { - let (genesis_block, _mint_keypair) = GenesisBlock::new(2 + BOOTSTRAP_LEADER_TOKENS); + let (genesis_block, _mint_keypair) = GenesisBlock::new(2); let bank = Arc::new(Bank::new(&genesis_block)); let (_verified_sender, verified_receiver) = channel(); let (to_validator_sender, _) = channel(); @@ -330,7 +330,7 @@ mod tests { #[test] fn test_banking_stage_tick() { - let (genesis_block, _mint_keypair) = GenesisBlock::new(2 + BOOTSTRAP_LEADER_TOKENS); + let (genesis_block, _mint_keypair) = GenesisBlock::new(2); let bank = Arc::new(Bank::new(&genesis_block)); let start_hash = bank.last_id(); let (verified_sender, verified_receiver) = channel(); @@ -359,7 +359,7 @@ mod tests { #[test] fn test_banking_stage_entries_only() { - let (genesis_block, mint_keypair) = GenesisBlock::new(2 + BOOTSTRAP_LEADER_TOKENS); + let (genesis_block, mint_keypair) = GenesisBlock::new(2); let bank = Arc::new(Bank::new(&genesis_block)); let start_hash = bank.last_id(); let (verified_sender, verified_receiver) = channel(); @@ -418,7 +418,7 @@ mod tests { // In this attack we'll demonstrate that a verifier can interpret the ledger // differently if either the server doesn't signal the ledger to add an // Entry OR if the verifier tries to parallelize across multiple Entries. - let (genesis_block, mint_keypair) = GenesisBlock::new(2 + BOOTSTRAP_LEADER_TOKENS); + let (genesis_block, mint_keypair) = GenesisBlock::new(2); let bank = Arc::new(Bank::new(&genesis_block)); let (verified_sender, verified_receiver) = channel(); let (to_validator_sender, _) = channel(); @@ -486,7 +486,7 @@ mod tests { // with reason BankingStageReturnType::LeaderRotation #[test] fn test_max_tick_height_shutdown() { - let (genesis_block, _mint_keypair) = GenesisBlock::new(2 + BOOTSTRAP_LEADER_TOKENS); + let (genesis_block, _mint_keypair) = GenesisBlock::new(2); let bank = Arc::new(Bank::new(&genesis_block)); let (_verified_sender_, verified_receiver) = channel(); let (to_validator_sender, _to_validator_receiver) = channel(); diff --git a/src/genesis_block.rs b/src/genesis_block.rs index ef8e5b2acd..97dbf08719 100644 --- a/src/genesis_block.rs +++ b/src/genesis_block.rs @@ -24,7 +24,9 @@ pub struct GenesisBlock { impl GenesisBlock { #[allow(clippy::new_ret_no_self)] pub fn new(tokens: u64) -> (Self, Keypair) { - assert!(tokens >= 2); + let tokens = tokens + .checked_add(BOOTSTRAP_LEADER_TOKENS) + .unwrap_or(tokens); let mint_keypair = Keypair::new(); let bootstrap_leader_keypair = Keypair::new(); let bootstrap_leader_vote_account_keypair = Keypair::new(); @@ -84,7 +86,7 @@ mod tests { #[test] fn test_genesis_block_new() { let (genesis_block, mint) = GenesisBlock::new(10_000); - assert_eq!(genesis_block.tokens, 10_000); + assert_eq!(genesis_block.tokens, 10_000 + BOOTSTRAP_LEADER_TOKENS); assert_eq!(genesis_block.mint_id, mint.pubkey()); assert!(genesis_block.bootstrap_leader_id != Pubkey::default()); assert!(genesis_block.bootstrap_leader_vote_account_id != Pubkey::default()); diff --git a/src/leader_scheduler.rs b/src/leader_scheduler.rs index 1fcf558a3d..0adc90f2aa 100644 --- a/src/leader_scheduler.rs +++ b/src/leader_scheduler.rs @@ -758,9 +758,8 @@ pub mod tests { fn test_rank_active_set() { let num_validators: usize = 101; // Give genesis_block sum(1..num_validators) tokens - let (genesis_block, mint_keypair) = GenesisBlock::new( - BOOTSTRAP_LEADER_TOKENS + (((num_validators + 1) / 2) * (num_validators + 1)) as u64, - ); + let (genesis_block, mint_keypair) = + GenesisBlock::new((((num_validators + 1) / 2) * (num_validators + 1)) as u64); let bank = Bank::new(&genesis_block); let mut validators = vec![]; let last_id = genesis_block.last_id(); @@ -818,8 +817,7 @@ pub mod tests { } // Break ties between validators with the same balances using public key - let (genesis_block, mint_keypair) = - GenesisBlock::new(BOOTSTRAP_LEADER_TOKENS + (num_validators + 1) as u64); + let (genesis_block, mint_keypair) = GenesisBlock::new((num_validators + 1) as u64); let bank = Bank::new(&genesis_block); let mut tied_validators_pk = vec![]; let last_id = genesis_block.last_id(); @@ -939,9 +937,8 @@ pub mod tests { // Create the bank and validators let (genesis_block, mint_keypair) = GenesisBlock::new( - BOOTSTRAP_LEADER_TOKENS - + ((((num_validators + 1) / 2) * (num_validators + 1)) - + (num_vote_account_tokens * num_validators)) as u64, + ((((num_validators + 1) / 2) * (num_validators + 1)) + + (num_vote_account_tokens * num_validators)) as u64, ); let bank = Bank::new_with_leader_scheduler_config(&genesis_block, &leader_scheduler_config); let mut validators = vec![]; diff --git a/src/retransmit_stage.rs b/src/retransmit_stage.rs index aa8030114c..ceaae0662d 100644 --- a/src/retransmit_stage.rs +++ b/src/retransmit_stage.rs @@ -245,7 +245,7 @@ mod tests { let required_balance = num_nodes * (num_nodes + 1) / 2; // create a genesis block - let (genesis_block, mint_keypair) = GenesisBlock::new(required_balance + 2); + let (genesis_block, mint_keypair) = GenesisBlock::new(required_balance); // describe the leader let leader_info = ContactInfo::new_localhost(Keypair::new().pubkey(), 0); diff --git a/src/rpc.rs b/src/rpc.rs index b70ae2a6e7..85a7705071 100644 --- a/src/rpc.rs +++ b/src/rpc.rs @@ -496,8 +496,7 @@ mod tests { #[test] fn test_rpc_new() { - let (genesis_block, alice) = - GenesisBlock::new(10_000 + crate::genesis_block::BOOTSTRAP_LEADER_TOKENS); + let (genesis_block, alice) = GenesisBlock::new(10_000); let bank = Bank::new(&genesis_block); let cluster_info = Arc::new(RwLock::new(ClusterInfo::new(NodeInfo::default()))); let rpc_addr = SocketAddr::new( diff --git a/src/tvu.rs b/src/tvu.rs index 68545a4bc0..f6b4a3226a 100644 --- a/src/tvu.rs +++ b/src/tvu.rs @@ -326,8 +326,6 @@ pub mod tests { let (genesis_block, mint_keypair) = GenesisBlock::new(starting_balance); let tvu_addr = target1.info.tvu; let bank = Arc::new(Bank::new(&genesis_block)); - // 2 tokens are consumed by the genesis - let starting_balance = starting_balance - 2; assert_eq!(bank.get_balance(&mint_keypair.pubkey()), starting_balance); //start cluster_info1