sample_ledger -> sample_blocktree
This commit is contained in:
		@@ -1,7 +1,7 @@
 | 
				
			|||||||
use assert_cmd::prelude::*;
 | 
					use assert_cmd::prelude::*;
 | 
				
			||||||
use solana::blocktree::create_tmp_sample_ledger;
 | 
					use solana::blocktree::create_tmp_sample_blocktree;
 | 
				
			||||||
 | 
					use solana_sdk::genesis_block::GenesisBlock;
 | 
				
			||||||
use solana_sdk::signature::{Keypair, KeypairUtil};
 | 
					use solana_sdk::signature::{Keypair, KeypairUtil};
 | 
				
			||||||
use solana_sdk::timing::DEFAULT_TICKS_PER_SLOT;
 | 
					 | 
				
			||||||
use std::process::Command;
 | 
					use std::process::Command;
 | 
				
			||||||
use std::process::Output;
 | 
					use std::process::Output;
 | 
				
			||||||
use std::sync::Arc;
 | 
					use std::sync::Arc;
 | 
				
			||||||
@@ -32,15 +32,13 @@ fn bad_arguments() {
 | 
				
			|||||||
#[test]
 | 
					#[test]
 | 
				
			||||||
fn nominal() {
 | 
					fn nominal() {
 | 
				
			||||||
    let keypair = Arc::new(Keypair::new());
 | 
					    let keypair = Arc::new(Keypair::new());
 | 
				
			||||||
    let ticks_per_slot = DEFAULT_TICKS_PER_SLOT;
 | 
					    let (genesis_block, _mint_keypair) = GenesisBlock::new_with_leader(100, keypair.pubkey(), 50);
 | 
				
			||||||
    let (_mint_keypair, ledger_path, tick_height, _last_entry_height, _last_id, _last_entry_id) =
 | 
					    let ticks_per_slot = genesis_block.ticks_per_slot;
 | 
				
			||||||
        create_tmp_sample_ledger(
 | 
					    let (ledger_path, tick_height, _last_entry_height, _last_id, _last_entry_id) =
 | 
				
			||||||
 | 
					        create_tmp_sample_blocktree(
 | 
				
			||||||
            "test_ledger_tool_nominal",
 | 
					            "test_ledger_tool_nominal",
 | 
				
			||||||
            100,
 | 
					            &genesis_block,
 | 
				
			||||||
            ticks_per_slot - 2,
 | 
					            ticks_per_slot - 2,
 | 
				
			||||||
            keypair.pubkey(),
 | 
					 | 
				
			||||||
            50,
 | 
					 | 
				
			||||||
            ticks_per_slot,
 | 
					 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Basic validation
 | 
					    // Basic validation
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,6 @@ use serde::de::DeserializeOwned;
 | 
				
			|||||||
use serde::Serialize;
 | 
					use serde::Serialize;
 | 
				
			||||||
use solana_sdk::genesis_block::GenesisBlock;
 | 
					use solana_sdk::genesis_block::GenesisBlock;
 | 
				
			||||||
use solana_sdk::hash::Hash;
 | 
					use solana_sdk::hash::Hash;
 | 
				
			||||||
use solana_sdk::pubkey::Pubkey;
 | 
					 | 
				
			||||||
use solana_sdk::signature::{Keypair, KeypairUtil};
 | 
					use solana_sdk::signature::{Keypair, KeypairUtil};
 | 
				
			||||||
use solana_sdk::timing::DEFAULT_TICKS_PER_SLOT;
 | 
					use solana_sdk::timing::DEFAULT_TICKS_PER_SLOT;
 | 
				
			||||||
use std::borrow::{Borrow, Cow};
 | 
					use std::borrow::{Borrow, Cow};
 | 
				
			||||||
@@ -1330,31 +1329,6 @@ pub fn create_tmp_sample_blocktree(
 | 
				
			|||||||
    )
 | 
					    )
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Deprecated! Please use create_tmp_sample_blocktree() instead.
 | 
					 | 
				
			||||||
pub fn create_tmp_sample_ledger(
 | 
					 | 
				
			||||||
    name: &str,
 | 
					 | 
				
			||||||
    num_tokens: u64,
 | 
					 | 
				
			||||||
    num_extra_tokens: u64,
 | 
					 | 
				
			||||||
    bootstrap_leader_id: Pubkey,
 | 
					 | 
				
			||||||
    bootstrap_leader_tokens: u64,
 | 
					 | 
				
			||||||
    ticks_per_slot: u64,
 | 
					 | 
				
			||||||
) -> (Keypair, String, u64, u64, Hash, Hash) {
 | 
					 | 
				
			||||||
    let (mut genesis_block, mint_keypair) =
 | 
					 | 
				
			||||||
        GenesisBlock::new_with_leader(num_tokens, bootstrap_leader_id, bootstrap_leader_tokens);
 | 
					 | 
				
			||||||
    genesis_block.ticks_per_slot = ticks_per_slot;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    let (ledger_path, tick_height, entry_height, last_id, last_entry_id) =
 | 
					 | 
				
			||||||
        create_tmp_sample_blocktree(name, &genesis_block, num_extra_tokens);
 | 
					 | 
				
			||||||
    (
 | 
					 | 
				
			||||||
        mint_keypair,
 | 
					 | 
				
			||||||
        ledger_path,
 | 
					 | 
				
			||||||
        tick_height,
 | 
					 | 
				
			||||||
        entry_height,
 | 
					 | 
				
			||||||
        last_id,
 | 
					 | 
				
			||||||
        last_entry_id,
 | 
					 | 
				
			||||||
    )
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
pub fn tmp_copy_ledger(from: &str, name: &str, ticks_per_slot: u64) -> String {
 | 
					pub fn tmp_copy_ledger(from: &str, name: &str, ticks_per_slot: u64) -> String {
 | 
				
			||||||
    let path = get_tmp_ledger_path(name);
 | 
					    let path = get_tmp_ledger_path(name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -383,7 +383,7 @@ impl Service for ReplayStage {
 | 
				
			|||||||
#[cfg(test)]
 | 
					#[cfg(test)]
 | 
				
			||||||
mod test {
 | 
					mod test {
 | 
				
			||||||
    use super::*;
 | 
					    use super::*;
 | 
				
			||||||
    use crate::blocktree::{create_tmp_sample_ledger, Blocktree, DEFAULT_SLOT_HEIGHT};
 | 
					    use crate::blocktree::{create_tmp_sample_blocktree, Blocktree, DEFAULT_SLOT_HEIGHT};
 | 
				
			||||||
    use crate::cluster_info::{ClusterInfo, Node};
 | 
					    use crate::cluster_info::{ClusterInfo, Node};
 | 
				
			||||||
    use crate::entry::create_ticks;
 | 
					    use crate::entry::create_ticks;
 | 
				
			||||||
    use crate::entry::{next_entry_mut, Entry};
 | 
					    use crate::entry::{next_entry_mut, Entry};
 | 
				
			||||||
@@ -421,22 +421,17 @@ mod test {
 | 
				
			|||||||
        let leader_scheduler =
 | 
					        let leader_scheduler =
 | 
				
			||||||
            Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config)));
 | 
					            Arc::new(RwLock::new(LeaderScheduler::new(&leader_scheduler_config)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let (mut genesis_block, mint_keypair) =
 | 
				
			||||||
 | 
					            GenesisBlock::new_with_leader(10_000, old_leader_id, 500);
 | 
				
			||||||
 | 
					        genesis_block.ticks_per_slot = ticks_per_slot;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Create a ledger
 | 
					        // Create a ledger
 | 
				
			||||||
        let (
 | 
					        let (my_ledger_path, mut tick_height, entry_height, mut last_id, last_entry_id) =
 | 
				
			||||||
            mint_keypair,
 | 
					            create_tmp_sample_blocktree(
 | 
				
			||||||
            my_ledger_path,
 | 
					                "test_replay_stage_leader_rotation_exit",
 | 
				
			||||||
            mut tick_height,
 | 
					                &genesis_block,
 | 
				
			||||||
            entry_height,
 | 
					                0,
 | 
				
			||||||
            mut last_id,
 | 
					            );
 | 
				
			||||||
            last_entry_id,
 | 
					 | 
				
			||||||
        ) = create_tmp_sample_ledger(
 | 
					 | 
				
			||||||
            "test_replay_stage_leader_rotation_exit",
 | 
					 | 
				
			||||||
            10_000,
 | 
					 | 
				
			||||||
            0,
 | 
					 | 
				
			||||||
            old_leader_id,
 | 
					 | 
				
			||||||
            500,
 | 
					 | 
				
			||||||
            ticks_per_slot,
 | 
					 | 
				
			||||||
        );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        info!("my_id: {:?}", my_id);
 | 
					        info!("my_id: {:?}", my_id);
 | 
				
			||||||
        info!("old_leader_id: {:?}", old_leader_id);
 | 
					        info!("old_leader_id: {:?}", old_leader_id);
 | 
				
			||||||
@@ -550,21 +545,14 @@ mod test {
 | 
				
			|||||||
        // Create keypair for the leader
 | 
					        // Create keypair for the leader
 | 
				
			||||||
        let leader_id = Keypair::new().pubkey();
 | 
					        let leader_id = Keypair::new().pubkey();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let (
 | 
					        let (genesis_block, _mint_keypair) = GenesisBlock::new_with_leader(10_000, leader_id, 500);
 | 
				
			||||||
            _mint_keypair,
 | 
					
 | 
				
			||||||
            my_ledger_path,
 | 
					        let (my_ledger_path, tick_height, _last_entry_height, _last_id, _last_entry_id) =
 | 
				
			||||||
            tick_height,
 | 
					            create_tmp_sample_blocktree(
 | 
				
			||||||
            _last_entry_height,
 | 
					                "test_vote_error_replay_stage_correctness",
 | 
				
			||||||
            _last_id,
 | 
					                &genesis_block,
 | 
				
			||||||
            _last_entry_id,
 | 
					                1,
 | 
				
			||||||
        ) = create_tmp_sample_ledger(
 | 
					            );
 | 
				
			||||||
            "test_vote_error_replay_stage_correctness",
 | 
					 | 
				
			||||||
            10_000,
 | 
					 | 
				
			||||||
            1,
 | 
					 | 
				
			||||||
            leader_id,
 | 
					 | 
				
			||||||
            500,
 | 
					 | 
				
			||||||
            DEFAULT_TICKS_PER_SLOT,
 | 
					 | 
				
			||||||
        );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Set up the cluster info
 | 
					        // Set up the cluster info
 | 
				
			||||||
        let cluster_info_me = Arc::new(RwLock::new(ClusterInfo::new(my_node.info.clone())));
 | 
					        let cluster_info_me = Arc::new(RwLock::new(ClusterInfo::new(my_node.info.clone())));
 | 
				
			||||||
@@ -644,22 +632,17 @@ mod test {
 | 
				
			|||||||
        // Create keypair for the leader
 | 
					        // Create keypair for the leader
 | 
				
			||||||
        let leader_id = Keypair::new().pubkey();
 | 
					        let leader_id = Keypair::new().pubkey();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let (mut genesis_block, mint_keypair) =
 | 
				
			||||||
 | 
					            GenesisBlock::new_with_leader(10_000, leader_id, 500);
 | 
				
			||||||
 | 
					        genesis_block.ticks_per_slot = ticks_per_slot;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Create the ledger
 | 
					        // Create the ledger
 | 
				
			||||||
        let (
 | 
					        let (my_ledger_path, tick_height, genesis_entry_height, last_id, last_entry_id) =
 | 
				
			||||||
            mint_keypair,
 | 
					            create_tmp_sample_blocktree(
 | 
				
			||||||
            my_ledger_path,
 | 
					                "test_vote_error_replay_stage_leader_rotation",
 | 
				
			||||||
            tick_height,
 | 
					                &genesis_block,
 | 
				
			||||||
            genesis_entry_height,
 | 
					                1,
 | 
				
			||||||
            last_id,
 | 
					            );
 | 
				
			||||||
            last_entry_id,
 | 
					 | 
				
			||||||
        ) = create_tmp_sample_ledger(
 | 
					 | 
				
			||||||
            "test_vote_error_replay_stage_leader_rotation",
 | 
					 | 
				
			||||||
            10_000,
 | 
					 | 
				
			||||||
            1,
 | 
					 | 
				
			||||||
            leader_id,
 | 
					 | 
				
			||||||
            500,
 | 
					 | 
				
			||||||
            ticks_per_slot,
 | 
					 | 
				
			||||||
        );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let my_keypair = Arc::new(my_keypair);
 | 
					        let my_keypair = Arc::new(my_keypair);
 | 
				
			||||||
        // Write two entries to the ledger so that the validator is in the active set:
 | 
					        // Write two entries to the ledger so that the validator is in the active set:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -444,7 +444,7 @@ impl Service for StorageStage {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#[cfg(test)]
 | 
					#[cfg(test)]
 | 
				
			||||||
mod tests {
 | 
					mod tests {
 | 
				
			||||||
    use crate::blocktree::{create_tmp_sample_ledger, Blocktree, DEFAULT_SLOT_HEIGHT};
 | 
					    use crate::blocktree::{create_tmp_sample_blocktree, Blocktree, DEFAULT_SLOT_HEIGHT};
 | 
				
			||||||
    use crate::cluster_info::{ClusterInfo, NodeInfo};
 | 
					    use crate::cluster_info::{ClusterInfo, NodeInfo};
 | 
				
			||||||
    use crate::entry::{make_tiny_test_entries, Entry};
 | 
					    use crate::entry::{make_tiny_test_entries, Entry};
 | 
				
			||||||
    use crate::service::Service;
 | 
					    use crate::service::Service;
 | 
				
			||||||
@@ -454,11 +454,11 @@ mod tests {
 | 
				
			|||||||
        get_identity_index_from_signature, StorageStage, STORAGE_ROTATE_TEST_COUNT,
 | 
					        get_identity_index_from_signature, StorageStage, STORAGE_ROTATE_TEST_COUNT,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    use rayon::prelude::*;
 | 
					    use rayon::prelude::*;
 | 
				
			||||||
 | 
					    use solana_sdk::genesis_block::GenesisBlock;
 | 
				
			||||||
    use solana_sdk::hash::Hash;
 | 
					    use solana_sdk::hash::Hash;
 | 
				
			||||||
    use solana_sdk::hash::Hasher;
 | 
					    use solana_sdk::hash::Hasher;
 | 
				
			||||||
    use solana_sdk::pubkey::Pubkey;
 | 
					    use solana_sdk::pubkey::Pubkey;
 | 
				
			||||||
    use solana_sdk::signature::{Keypair, KeypairUtil};
 | 
					    use solana_sdk::signature::{Keypair, KeypairUtil};
 | 
				
			||||||
    use solana_sdk::timing::DEFAULT_TICKS_PER_SLOT;
 | 
					 | 
				
			||||||
    use solana_sdk::vote_transaction::VoteTransaction;
 | 
					    use solana_sdk::vote_transaction::VoteTransaction;
 | 
				
			||||||
    use std::cmp::{max, min};
 | 
					    use std::cmp::{max, min};
 | 
				
			||||||
    use std::fs::remove_dir_all;
 | 
					    use std::fs::remove_dir_all;
 | 
				
			||||||
@@ -503,16 +503,10 @@ mod tests {
 | 
				
			|||||||
        let keypair = Arc::new(Keypair::new());
 | 
					        let keypair = Arc::new(Keypair::new());
 | 
				
			||||||
        let exit = Arc::new(AtomicBool::new(false));
 | 
					        let exit = Arc::new(AtomicBool::new(false));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let ticks_per_slot = DEFAULT_TICKS_PER_SLOT;
 | 
					        let (genesis_block, _mint_keypair) = GenesisBlock::new(1000);
 | 
				
			||||||
        let (_mint, ledger_path, tick_height, genesis_entry_height, _last_id, _last_entry_id) =
 | 
					        let ticks_per_slot = genesis_block.ticks_per_slot;
 | 
				
			||||||
            create_tmp_sample_ledger(
 | 
					        let (ledger_path, tick_height, genesis_entry_height, _last_id, _last_entry_id) =
 | 
				
			||||||
                "storage_stage_process_entries",
 | 
					            create_tmp_sample_blocktree("storage_stage_process_entries", &genesis_block, 1);
 | 
				
			||||||
                1000,
 | 
					 | 
				
			||||||
                1,
 | 
					 | 
				
			||||||
                Keypair::new().pubkey(),
 | 
					 | 
				
			||||||
                1,
 | 
					 | 
				
			||||||
                ticks_per_slot,
 | 
					 | 
				
			||||||
            );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let entries = make_tiny_test_entries(64);
 | 
					        let entries = make_tiny_test_entries(64);
 | 
				
			||||||
        let blocktree = Blocktree::open_config(&ledger_path, ticks_per_slot).unwrap();
 | 
					        let blocktree = Blocktree::open_config(&ledger_path, ticks_per_slot).unwrap();
 | 
				
			||||||
@@ -579,16 +573,10 @@ mod tests {
 | 
				
			|||||||
        let keypair = Arc::new(Keypair::new());
 | 
					        let keypair = Arc::new(Keypair::new());
 | 
				
			||||||
        let exit = Arc::new(AtomicBool::new(false));
 | 
					        let exit = Arc::new(AtomicBool::new(false));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let ticks_per_slot = DEFAULT_TICKS_PER_SLOT;
 | 
					        let (genesis_block, _mint_keypair) = GenesisBlock::new(1000);
 | 
				
			||||||
        let (_mint, ledger_path, tick_height, genesis_entry_height, _last_id, _last_entry_id) =
 | 
					        let ticks_per_slot = genesis_block.ticks_per_slot;;
 | 
				
			||||||
            create_tmp_sample_ledger(
 | 
					        let (ledger_path, tick_height, genesis_entry_height, _last_id, _last_entry_id) =
 | 
				
			||||||
                "storage_stage_process_entries",
 | 
					            create_tmp_sample_blocktree("storage_stage_process_entries", &genesis_block, 1);
 | 
				
			||||||
                1000,
 | 
					 | 
				
			||||||
                1,
 | 
					 | 
				
			||||||
                Keypair::new().pubkey(),
 | 
					 | 
				
			||||||
                1,
 | 
					 | 
				
			||||||
                ticks_per_slot,
 | 
					 | 
				
			||||||
            );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let entries = make_tiny_test_entries(128);
 | 
					        let entries = make_tiny_test_entries(128);
 | 
				
			||||||
        let blocktree = Blocktree::open_config(&ledger_path, ticks_per_slot).unwrap();
 | 
					        let blocktree = Blocktree::open_config(&ledger_path, ticks_per_slot).unwrap();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -452,26 +452,21 @@ pub fn retry_get_balance(
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn new_fullnode(ledger_name: &'static str) -> (Fullnode, NodeInfo, Keypair, String) {
 | 
					pub fn new_fullnode(ledger_name: &'static str) -> (Fullnode, NodeInfo, Keypair, String) {
 | 
				
			||||||
    use crate::blocktree::create_tmp_sample_ledger;
 | 
					    use crate::blocktree::create_tmp_sample_blocktree;
 | 
				
			||||||
    use crate::cluster_info::Node;
 | 
					    use crate::cluster_info::Node;
 | 
				
			||||||
    use crate::fullnode::Fullnode;
 | 
					    use crate::fullnode::Fullnode;
 | 
				
			||||||
    use crate::voting_keypair::VotingKeypair;
 | 
					    use crate::voting_keypair::VotingKeypair;
 | 
				
			||||||
 | 
					    use solana_sdk::genesis_block::GenesisBlock;
 | 
				
			||||||
    use solana_sdk::signature::KeypairUtil;
 | 
					    use solana_sdk::signature::KeypairUtil;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let node_keypair = Arc::new(Keypair::new());
 | 
					    let node_keypair = Arc::new(Keypair::new());
 | 
				
			||||||
    let node = Node::new_localhost_with_pubkey(node_keypair.pubkey());
 | 
					    let node = Node::new_localhost_with_pubkey(node_keypair.pubkey());
 | 
				
			||||||
    let node_info = node.info.clone();
 | 
					    let node_info = node.info.clone();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let fullnode_config = &FullnodeConfig::default();
 | 
					    let (genesis_block, mint_keypair) = GenesisBlock::new_with_leader(10_000, node_info.id, 42);
 | 
				
			||||||
    let (mint_keypair, ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) =
 | 
					
 | 
				
			||||||
        create_tmp_sample_ledger(
 | 
					    let (ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) =
 | 
				
			||||||
            ledger_name,
 | 
					        create_tmp_sample_blocktree(ledger_name, &genesis_block, 0);
 | 
				
			||||||
            10_000,
 | 
					 | 
				
			||||||
            0,
 | 
					 | 
				
			||||||
            node_info.id,
 | 
					 | 
				
			||||||
            42,
 | 
					 | 
				
			||||||
            fullnode_config.ticks_per_slot(),
 | 
					 | 
				
			||||||
        );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let vote_account_keypair = Arc::new(Keypair::new());
 | 
					    let vote_account_keypair = Arc::new(Keypair::new());
 | 
				
			||||||
    let voting_keypair = VotingKeypair::new_local(&vote_account_keypair);
 | 
					    let voting_keypair = VotingKeypair::new_local(&vote_account_keypair);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
use log::*;
 | 
					use log::*;
 | 
				
			||||||
use solana::blob_fetch_stage::BlobFetchStage;
 | 
					use solana::blob_fetch_stage::BlobFetchStage;
 | 
				
			||||||
use solana::blocktree::{
 | 
					use solana::blocktree::{
 | 
				
			||||||
    create_tmp_sample_ledger, tmp_copy_ledger, Blocktree, DEFAULT_SLOT_HEIGHT,
 | 
					    create_tmp_sample_blocktree, tmp_copy_ledger, Blocktree, DEFAULT_SLOT_HEIGHT,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use solana::client::mk_client;
 | 
					use solana::client::mk_client;
 | 
				
			||||||
use solana::cluster_info::{Node, NodeInfo};
 | 
					use solana::cluster_info::{Node, NodeInfo};
 | 
				
			||||||
@@ -13,6 +13,7 @@ use solana::result;
 | 
				
			|||||||
use solana::service::Service;
 | 
					use solana::service::Service;
 | 
				
			||||||
use solana::thin_client::{poll_gossip_for_leader, retry_get_balance};
 | 
					use solana::thin_client::{poll_gossip_for_leader, retry_get_balance};
 | 
				
			||||||
use solana::voting_keypair::VotingKeypair;
 | 
					use solana::voting_keypair::VotingKeypair;
 | 
				
			||||||
 | 
					use solana_sdk::genesis_block::GenesisBlock;
 | 
				
			||||||
use solana_sdk::pubkey::Pubkey;
 | 
					use solana_sdk::pubkey::Pubkey;
 | 
				
			||||||
use solana_sdk::signature::{Keypair, KeypairUtil};
 | 
					use solana_sdk::signature::{Keypair, KeypairUtil};
 | 
				
			||||||
use solana_sdk::system_transaction::SystemTransaction;
 | 
					use solana_sdk::system_transaction::SystemTransaction;
 | 
				
			||||||
@@ -45,25 +46,12 @@ fn test_multi_node_ledger_window() -> result::Result<()> {
 | 
				
			|||||||
    let bob_pubkey = Keypair::new().pubkey();
 | 
					    let bob_pubkey = Keypair::new().pubkey();
 | 
				
			||||||
    let mut ledger_paths = Vec::new();
 | 
					    let mut ledger_paths = Vec::new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let fullnode_config = FullnodeConfig::default();
 | 
					    let (genesis_block, alice) = GenesisBlock::new_with_leader(10_000, leader_data.id, 500);
 | 
				
			||||||
    let ticks_per_slot = fullnode_config.leader_scheduler_config.ticks_per_slot;
 | 
					    let ticks_per_slot = genesis_block.ticks_per_slot;
 | 
				
			||||||
    info!("ticks_per_slot: {}", ticks_per_slot);
 | 
					    info!("ticks_per_slot: {}", ticks_per_slot);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let (
 | 
					    let (leader_ledger_path, tick_height, mut last_entry_height, _last_id, mut last_entry_id) =
 | 
				
			||||||
        alice,
 | 
					        create_tmp_sample_blocktree("multi_node_ledger_window", &genesis_block, 0);
 | 
				
			||||||
        leader_ledger_path,
 | 
					 | 
				
			||||||
        tick_height,
 | 
					 | 
				
			||||||
        mut last_entry_height,
 | 
					 | 
				
			||||||
        _last_id,
 | 
					 | 
				
			||||||
        mut last_entry_id,
 | 
					 | 
				
			||||||
    ) = create_tmp_sample_ledger(
 | 
					 | 
				
			||||||
        "multi_node_ledger_window",
 | 
					 | 
				
			||||||
        10_000,
 | 
					 | 
				
			||||||
        0,
 | 
					 | 
				
			||||||
        leader_data.id,
 | 
					 | 
				
			||||||
        500,
 | 
					 | 
				
			||||||
        ticks_per_slot,
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
    ledger_paths.push(leader_ledger_path.clone());
 | 
					    ledger_paths.push(leader_ledger_path.clone());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // make a copy at zero
 | 
					    // make a copy at zero
 | 
				
			||||||
@@ -81,7 +69,7 @@ fn test_multi_node_ledger_window() -> result::Result<()> {
 | 
				
			|||||||
        let blocktree = Blocktree::open_config(&leader_ledger_path, ticks_per_slot).unwrap();
 | 
					        let blocktree = Blocktree::open_config(&leader_ledger_path, ticks_per_slot).unwrap();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let entries = solana::entry::create_ticks(
 | 
					        let entries = solana::entry::create_ticks(
 | 
				
			||||||
            fullnode_config.leader_scheduler_config.ticks_per_slot - last_entry_height - 1,
 | 
					            genesis_block.ticks_per_slot - last_entry_height - 1,
 | 
				
			||||||
            last_entry_id,
 | 
					            last_entry_id,
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
        blocktree
 | 
					        blocktree
 | 
				
			||||||
@@ -102,6 +90,7 @@ fn test_multi_node_ledger_window() -> result::Result<()> {
 | 
				
			|||||||
        );
 | 
					        );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let fullnode_config = FullnodeConfig::default();
 | 
				
			||||||
    let voting_keypair = VotingKeypair::new_local(&leader_keypair);
 | 
					    let voting_keypair = VotingKeypair::new_local(&leader_keypair);
 | 
				
			||||||
    let leader = Fullnode::new(
 | 
					    let leader = Fullnode::new(
 | 
				
			||||||
        leader,
 | 
					        leader,
 | 
				
			||||||
@@ -185,17 +174,11 @@ fn test_multi_node_validator_catchup_from_zero() -> result::Result<()> {
 | 
				
			|||||||
    let bob_pubkey = Keypair::new().pubkey();
 | 
					    let bob_pubkey = Keypair::new().pubkey();
 | 
				
			||||||
    let mut ledger_paths = Vec::new();
 | 
					    let mut ledger_paths = Vec::new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let fullnode_config = FullnodeConfig::default();
 | 
					    let (genesis_block, alice) = GenesisBlock::new_with_leader(10_000, leader_data.id, 500);
 | 
				
			||||||
    let ticks_per_slot = fullnode_config.ticks_per_slot();
 | 
					    let ticks_per_slot = genesis_block.ticks_per_slot;
 | 
				
			||||||
    let (alice, genesis_ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) =
 | 
					
 | 
				
			||||||
        create_tmp_sample_ledger(
 | 
					    let (genesis_ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) =
 | 
				
			||||||
            "multi_node_validator_catchup_from_zero",
 | 
					        create_tmp_sample_blocktree("multi_node_validator_catchup_from_zero", &genesis_block, 0);
 | 
				
			||||||
            10_000,
 | 
					 | 
				
			||||||
            0,
 | 
					 | 
				
			||||||
            leader_data.id,
 | 
					 | 
				
			||||||
            500,
 | 
					 | 
				
			||||||
            ticks_per_slot,
 | 
					 | 
				
			||||||
        );
 | 
					 | 
				
			||||||
    ledger_paths.push(genesis_ledger_path.clone());
 | 
					    ledger_paths.push(genesis_ledger_path.clone());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let zero_ledger_path = tmp_copy_ledger(
 | 
					    let zero_ledger_path = tmp_copy_ledger(
 | 
				
			||||||
@@ -211,6 +194,7 @@ fn test_multi_node_validator_catchup_from_zero() -> result::Result<()> {
 | 
				
			|||||||
        ticks_per_slot,
 | 
					        ticks_per_slot,
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
    ledger_paths.push(leader_ledger_path.clone());
 | 
					    ledger_paths.push(leader_ledger_path.clone());
 | 
				
			||||||
 | 
					    let fullnode_config = FullnodeConfig::default();
 | 
				
			||||||
    let voting_keypair = VotingKeypair::new_local(&leader_keypair);
 | 
					    let voting_keypair = VotingKeypair::new_local(&leader_keypair);
 | 
				
			||||||
    let server = Fullnode::new(
 | 
					    let server = Fullnode::new(
 | 
				
			||||||
        leader,
 | 
					        leader,
 | 
				
			||||||
@@ -380,23 +364,18 @@ fn test_multi_node_basic() {
 | 
				
			|||||||
    let bob_pubkey = Keypair::new().pubkey();
 | 
					    let bob_pubkey = Keypair::new().pubkey();
 | 
				
			||||||
    let mut ledger_paths = Vec::new();
 | 
					    let mut ledger_paths = Vec::new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let fullnode_config = FullnodeConfig::default();
 | 
					    let (genesis_block, alice) = GenesisBlock::new_with_leader(10_000, leader_data.id, 500);
 | 
				
			||||||
    let ticks_per_slot = fullnode_config.ticks_per_slot();
 | 
					    let ticks_per_slot = genesis_block.ticks_per_slot;
 | 
				
			||||||
    let (alice, genesis_ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) =
 | 
					
 | 
				
			||||||
        create_tmp_sample_ledger(
 | 
					    let (genesis_ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) =
 | 
				
			||||||
            "multi_node_basic",
 | 
					        create_tmp_sample_blocktree("multi_node_basic", &genesis_block, 0);
 | 
				
			||||||
            10_000,
 | 
					 | 
				
			||||||
            0,
 | 
					 | 
				
			||||||
            leader_data.id,
 | 
					 | 
				
			||||||
            500,
 | 
					 | 
				
			||||||
            ticks_per_slot,
 | 
					 | 
				
			||||||
        );
 | 
					 | 
				
			||||||
    ledger_paths.push(genesis_ledger_path.clone());
 | 
					    ledger_paths.push(genesis_ledger_path.clone());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let leader_ledger_path =
 | 
					    let leader_ledger_path =
 | 
				
			||||||
        tmp_copy_ledger(&genesis_ledger_path, "multi_node_basic", ticks_per_slot);
 | 
					        tmp_copy_ledger(&genesis_ledger_path, "multi_node_basic", ticks_per_slot);
 | 
				
			||||||
    ledger_paths.push(leader_ledger_path.clone());
 | 
					    ledger_paths.push(leader_ledger_path.clone());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let fullnode_config = FullnodeConfig::default();
 | 
				
			||||||
    let voting_keypair = VotingKeypair::new_local(&leader_keypair);
 | 
					    let voting_keypair = VotingKeypair::new_local(&leader_keypair);
 | 
				
			||||||
    let server = Fullnode::new(
 | 
					    let server = Fullnode::new(
 | 
				
			||||||
        leader,
 | 
					        leader,
 | 
				
			||||||
@@ -490,17 +469,11 @@ fn test_boot_validator_from_file() -> result::Result<()> {
 | 
				
			|||||||
    let bob_pubkey = Keypair::new().pubkey();
 | 
					    let bob_pubkey = Keypair::new().pubkey();
 | 
				
			||||||
    let mut ledger_paths = Vec::new();
 | 
					    let mut ledger_paths = Vec::new();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let fullnode_config = FullnodeConfig::default();
 | 
					    let (genesis_block, alice) = GenesisBlock::new_with_leader(100_000, leader_pubkey, 1000);
 | 
				
			||||||
    let ticks_per_slot = fullnode_config.ticks_per_slot();
 | 
					    let ticks_per_slot = genesis_block.ticks_per_slot;
 | 
				
			||||||
    let (alice, genesis_ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) =
 | 
					
 | 
				
			||||||
        create_tmp_sample_ledger(
 | 
					    let (genesis_ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) =
 | 
				
			||||||
            "boot_validator_from_file",
 | 
					        create_tmp_sample_blocktree("boot_validator_from_file", &genesis_block, 0);
 | 
				
			||||||
            100_000,
 | 
					 | 
				
			||||||
            0,
 | 
					 | 
				
			||||||
            leader_pubkey,
 | 
					 | 
				
			||||||
            1000,
 | 
					 | 
				
			||||||
            ticks_per_slot,
 | 
					 | 
				
			||||||
        );
 | 
					 | 
				
			||||||
    ledger_paths.push(genesis_ledger_path.clone());
 | 
					    ledger_paths.push(genesis_ledger_path.clone());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let leader_ledger_path = tmp_copy_ledger(
 | 
					    let leader_ledger_path = tmp_copy_ledger(
 | 
				
			||||||
@@ -511,6 +484,7 @@ fn test_boot_validator_from_file() -> result::Result<()> {
 | 
				
			|||||||
    ledger_paths.push(leader_ledger_path.clone());
 | 
					    ledger_paths.push(leader_ledger_path.clone());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let leader_data = leader.info.clone();
 | 
					    let leader_data = leader.info.clone();
 | 
				
			||||||
 | 
					    let fullnode_config = FullnodeConfig::default();
 | 
				
			||||||
    let voting_keypair = VotingKeypair::new_local(&leader_keypair);
 | 
					    let voting_keypair = VotingKeypair::new_local(&leader_keypair);
 | 
				
			||||||
    let leader_fullnode = Fullnode::new(
 | 
					    let leader_fullnode = Fullnode::new(
 | 
				
			||||||
        leader,
 | 
					        leader,
 | 
				
			||||||
@@ -592,19 +566,23 @@ fn test_leader_restart_validator_start_from_old_ledger() -> result::Result<()> {
 | 
				
			|||||||
    //    ledger (currently up to WINDOW_SIZE entries)
 | 
					    //    ledger (currently up to WINDOW_SIZE entries)
 | 
				
			||||||
    solana_logger::setup();
 | 
					    solana_logger::setup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let ticks_per_slot = DEFAULT_TICKS_PER_SLOT;
 | 
					 | 
				
			||||||
    let leader_keypair = Arc::new(Keypair::new());
 | 
					    let leader_keypair = Arc::new(Keypair::new());
 | 
				
			||||||
    let initial_leader_balance = 500;
 | 
					    let initial_leader_balance = 500;
 | 
				
			||||||
    let fullnode_config = FullnodeConfig::default();
 | 
					
 | 
				
			||||||
    let (alice, ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) =
 | 
					    let (genesis_block, alice) = GenesisBlock::new_with_leader(
 | 
				
			||||||
        create_tmp_sample_ledger(
 | 
					        100_000 + 500 * solana::window_service::MAX_REPAIR_BACKOFF as u64,
 | 
				
			||||||
 | 
					        leader_keypair.pubkey(),
 | 
				
			||||||
 | 
					        initial_leader_balance,
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    let ticks_per_slot = genesis_block.ticks_per_slot;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let (ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) =
 | 
				
			||||||
 | 
					        create_tmp_sample_blocktree(
 | 
				
			||||||
            "leader_restart_validator_start_from_old_ledger",
 | 
					            "leader_restart_validator_start_from_old_ledger",
 | 
				
			||||||
            100_000 + 500 * solana::window_service::MAX_REPAIR_BACKOFF as u64,
 | 
					            &genesis_block,
 | 
				
			||||||
            0,
 | 
					            0,
 | 
				
			||||||
            leader_keypair.pubkey(),
 | 
					 | 
				
			||||||
            initial_leader_balance,
 | 
					 | 
				
			||||||
            ticks_per_slot,
 | 
					 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let bob_pubkey = Keypair::new().pubkey();
 | 
					    let bob_pubkey = Keypair::new().pubkey();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -656,6 +634,7 @@ fn test_leader_restart_validator_start_from_old_ledger() -> result::Result<()> {
 | 
				
			|||||||
    let validator = Node::new_localhost_with_pubkey(keypair.pubkey());
 | 
					    let validator = Node::new_localhost_with_pubkey(keypair.pubkey());
 | 
				
			||||||
    let validator_data = validator.info.clone();
 | 
					    let validator_data = validator.info.clone();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let fullnode_config = FullnodeConfig::default();
 | 
				
			||||||
    let voting_keypair = VotingKeypair::new_local(&keypair);
 | 
					    let voting_keypair = VotingKeypair::new_local(&keypair);
 | 
				
			||||||
    let val_fullnode = Fullnode::new(
 | 
					    let val_fullnode = Fullnode::new(
 | 
				
			||||||
        validator,
 | 
					        validator,
 | 
				
			||||||
@@ -712,17 +691,12 @@ fn test_multi_node_dynamic_network() {
 | 
				
			|||||||
    let leader_pubkey = leader_keypair.pubkey().clone();
 | 
					    let leader_pubkey = leader_keypair.pubkey().clone();
 | 
				
			||||||
    let leader = Node::new_localhost_with_pubkey(leader_keypair.pubkey());
 | 
					    let leader = Node::new_localhost_with_pubkey(leader_keypair.pubkey());
 | 
				
			||||||
    let bob_pubkey = Keypair::new().pubkey();
 | 
					    let bob_pubkey = Keypair::new().pubkey();
 | 
				
			||||||
    let fullnode_config = FullnodeConfig::default();
 | 
					
 | 
				
			||||||
    let ticks_per_slot = fullnode_config.ticks_per_slot();
 | 
					    let (genesis_block, alice) = GenesisBlock::new_with_leader(10_000_000, leader_pubkey, 500);
 | 
				
			||||||
    let (alice, genesis_ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) =
 | 
					    let ticks_per_slot = genesis_block.ticks_per_slot;
 | 
				
			||||||
        create_tmp_sample_ledger(
 | 
					
 | 
				
			||||||
            "multi_node_dynamic_network",
 | 
					    let (genesis_ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) =
 | 
				
			||||||
            10_000_000,
 | 
					        create_tmp_sample_blocktree("multi_node_dynamic_network", &genesis_block, 0);
 | 
				
			||||||
            0,
 | 
					 | 
				
			||||||
            leader_pubkey,
 | 
					 | 
				
			||||||
            500,
 | 
					 | 
				
			||||||
            ticks_per_slot,
 | 
					 | 
				
			||||||
        );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let mut ledger_paths = Vec::new();
 | 
					    let mut ledger_paths = Vec::new();
 | 
				
			||||||
    ledger_paths.push(genesis_ledger_path.clone());
 | 
					    ledger_paths.push(genesis_ledger_path.clone());
 | 
				
			||||||
@@ -737,6 +711,7 @@ fn test_multi_node_dynamic_network() {
 | 
				
			|||||||
    let leader_data = leader.info.clone();
 | 
					    let leader_data = leader.info.clone();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ledger_paths.push(leader_ledger_path.clone());
 | 
					    ledger_paths.push(leader_ledger_path.clone());
 | 
				
			||||||
 | 
					    let fullnode_config = FullnodeConfig::default();
 | 
				
			||||||
    let voting_keypair = VotingKeypair::new_local(&leader_keypair);
 | 
					    let voting_keypair = VotingKeypair::new_local(&leader_keypair);
 | 
				
			||||||
    let server = Fullnode::new(
 | 
					    let server = Fullnode::new(
 | 
				
			||||||
        leader,
 | 
					        leader,
 | 
				
			||||||
@@ -943,23 +918,14 @@ fn test_leader_to_validator_transition() {
 | 
				
			|||||||
        1,
 | 
					        1,
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let (mut genesis_block, mint_keypair) =
 | 
				
			||||||
 | 
					        GenesisBlock::new_with_leader(10_000, leader_info.id, 500);
 | 
				
			||||||
 | 
					    genesis_block.ticks_per_slot = ticks_per_slot;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Initialize the leader ledger. Make a mint and a genesis entry
 | 
					    // Initialize the leader ledger. Make a mint and a genesis entry
 | 
				
			||||||
    // in the leader ledger
 | 
					    // in the leader ledger
 | 
				
			||||||
    let (
 | 
					    let (leader_ledger_path, tick_height, genesis_entry_height, last_id, last_entry_id) =
 | 
				
			||||||
        mint_keypair,
 | 
					        create_tmp_sample_blocktree("test_leader_to_validator_transition", &genesis_block, 0);
 | 
				
			||||||
        leader_ledger_path,
 | 
					 | 
				
			||||||
        tick_height,
 | 
					 | 
				
			||||||
        genesis_entry_height,
 | 
					 | 
				
			||||||
        last_id,
 | 
					 | 
				
			||||||
        last_entry_id,
 | 
					 | 
				
			||||||
    ) = create_tmp_sample_ledger(
 | 
					 | 
				
			||||||
        "test_leader_to_validator_transition",
 | 
					 | 
				
			||||||
        10_000,
 | 
					 | 
				
			||||||
        0,
 | 
					 | 
				
			||||||
        leader_info.id,
 | 
					 | 
				
			||||||
        500,
 | 
					 | 
				
			||||||
        ticks_per_slot,
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Write the votes entries to the ledger that will cause leader rotation
 | 
					    // Write the votes entries to the ledger that will cause leader rotation
 | 
				
			||||||
    // to validator_keypair at slot 2
 | 
					    // to validator_keypair at slot 2
 | 
				
			||||||
@@ -1057,22 +1023,13 @@ fn test_leader_validator_basic() {
 | 
				
			|||||||
        1,
 | 
					        1,
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let (mut genesis_block, mint_keypair) =
 | 
				
			||||||
 | 
					        GenesisBlock::new_with_leader(10_000, leader_info.id, 500);
 | 
				
			||||||
 | 
					    genesis_block.ticks_per_slot = ticks_per_slot;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Make a common mint and a genesis entry for both leader + validator ledgers
 | 
					    // Make a common mint and a genesis entry for both leader + validator ledgers
 | 
				
			||||||
    let (
 | 
					    let (leader_ledger_path, tick_height, genesis_entry_height, last_id, last_entry_id) =
 | 
				
			||||||
        mint_keypair,
 | 
					        create_tmp_sample_blocktree("test_leader_validator_basic", &genesis_block, 0);
 | 
				
			||||||
        leader_ledger_path,
 | 
					 | 
				
			||||||
        tick_height,
 | 
					 | 
				
			||||||
        genesis_entry_height,
 | 
					 | 
				
			||||||
        last_id,
 | 
					 | 
				
			||||||
        last_entry_id,
 | 
					 | 
				
			||||||
    ) = create_tmp_sample_ledger(
 | 
					 | 
				
			||||||
        "test_leader_validator_basic",
 | 
					 | 
				
			||||||
        10_000,
 | 
					 | 
				
			||||||
        0,
 | 
					 | 
				
			||||||
        leader_info.id,
 | 
					 | 
				
			||||||
        500,
 | 
					 | 
				
			||||||
        ticks_per_slot,
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Add validator vote on tick height 1
 | 
					    // Add validator vote on tick height 1
 | 
				
			||||||
    let (active_set_entries, _) = make_active_set_entries(
 | 
					    let (active_set_entries, _) = make_active_set_entries(
 | 
				
			||||||
@@ -1207,23 +1164,18 @@ fn test_dropped_handoff_recovery() {
 | 
				
			|||||||
    fullnode_config.leader_scheduler_config =
 | 
					    fullnode_config.leader_scheduler_config =
 | 
				
			||||||
        LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, slots_per_epoch);
 | 
					        LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, slots_per_epoch);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let (mut genesis_block, mint_keypair) =
 | 
				
			||||||
 | 
					        GenesisBlock::new_with_leader(10_000, bootstrap_leader_info.id, 500);
 | 
				
			||||||
 | 
					    genesis_block.ticks_per_slot = ticks_per_slot;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Make a common mint and a genesis entry for both leader + validator's ledgers
 | 
					    // Make a common mint and a genesis entry for both leader + validator's ledgers
 | 
				
			||||||
    let num_ending_ticks = 1;
 | 
					    let num_ending_ticks = 1;
 | 
				
			||||||
    let (
 | 
					    let (genesis_ledger_path, tick_height, genesis_entry_height, last_id, last_entry_id) =
 | 
				
			||||||
        mint_keypair,
 | 
					        create_tmp_sample_blocktree(
 | 
				
			||||||
        genesis_ledger_path,
 | 
					            "test_dropped_handoff_recovery",
 | 
				
			||||||
        tick_height,
 | 
					            &genesis_block,
 | 
				
			||||||
        genesis_entry_height,
 | 
					            num_ending_ticks,
 | 
				
			||||||
        last_id,
 | 
					        );
 | 
				
			||||||
        last_entry_id,
 | 
					 | 
				
			||||||
    ) = create_tmp_sample_ledger(
 | 
					 | 
				
			||||||
        "test_dropped_handoff_recovery",
 | 
					 | 
				
			||||||
        10_000,
 | 
					 | 
				
			||||||
        num_ending_ticks,
 | 
					 | 
				
			||||||
        bootstrap_leader_info.id,
 | 
					 | 
				
			||||||
        500,
 | 
					 | 
				
			||||||
        ticks_per_slot,
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Create the validator keypair that will be the next leader in line
 | 
					    // Create the validator keypair that will be the next leader in line
 | 
				
			||||||
    let next_leader_keypair = Arc::new(Keypair::new());
 | 
					    let next_leader_keypair = Arc::new(Keypair::new());
 | 
				
			||||||
@@ -1390,23 +1342,18 @@ fn test_full_leader_validator_network() {
 | 
				
			|||||||
        node_keypairs.push_back(validator_keypair);
 | 
					        node_keypairs.push_back(validator_keypair);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let (mut genesis_block, mint_keypair) =
 | 
				
			||||||
 | 
					        GenesisBlock::new_with_leader(10_000, bootstrap_leader_info.id, 500);
 | 
				
			||||||
 | 
					    genesis_block.ticks_per_slot = ticks_per_slot;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Make a common mint and a genesis entry for both leader + validator's ledgers
 | 
					    // Make a common mint and a genesis entry for both leader + validator's ledgers
 | 
				
			||||||
    let num_ending_ticks = 1;
 | 
					    let num_ending_ticks = 1;
 | 
				
			||||||
    let (
 | 
					    let (bootstrap_leader_ledger_path, tick_height, mut entry_height, last_id, mut last_entry_id) =
 | 
				
			||||||
        mint_keypair,
 | 
					        create_tmp_sample_blocktree(
 | 
				
			||||||
        bootstrap_leader_ledger_path,
 | 
					            "test_full_leader_validator_network",
 | 
				
			||||||
        tick_height,
 | 
					            &genesis_block,
 | 
				
			||||||
        mut entry_height,
 | 
					            num_ending_ticks,
 | 
				
			||||||
        last_id,
 | 
					        );
 | 
				
			||||||
        mut last_entry_id,
 | 
					 | 
				
			||||||
    ) = create_tmp_sample_ledger(
 | 
					 | 
				
			||||||
        "test_full_leader_validator_network",
 | 
					 | 
				
			||||||
        10_000,
 | 
					 | 
				
			||||||
        num_ending_ticks,
 | 
					 | 
				
			||||||
        bootstrap_leader_info.id,
 | 
					 | 
				
			||||||
        500,
 | 
					 | 
				
			||||||
        ticks_per_slot,
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Create a common ledger with entries in the beginnging that will add all the validators
 | 
					    // Create a common ledger with entries in the beginnging that will add all the validators
 | 
				
			||||||
    // to the active set for leader election.
 | 
					    // to the active set for leader election.
 | 
				
			||||||
@@ -1607,22 +1554,18 @@ fn test_broadcast_last_tick() {
 | 
				
			|||||||
    fullnode_config.leader_scheduler_config =
 | 
					    fullnode_config.leader_scheduler_config =
 | 
				
			||||||
        LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, ticks_per_epoch);
 | 
					        LeaderSchedulerConfig::new(ticks_per_slot, slots_per_epoch, ticks_per_epoch);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let (mut genesis_block, _mint_keypair) =
 | 
				
			||||||
 | 
					        GenesisBlock::new_with_leader(10_000, bootstrap_leader_info.id, 500);
 | 
				
			||||||
 | 
					    genesis_block.ticks_per_slot = ticks_per_slot;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Create leader ledger
 | 
					    // Create leader ledger
 | 
				
			||||||
    let (
 | 
					    let (
 | 
				
			||||||
        _mint_keypair,
 | 
					 | 
				
			||||||
        bootstrap_leader_ledger_path,
 | 
					        bootstrap_leader_ledger_path,
 | 
				
			||||||
        _tick_height,
 | 
					        _tick_height,
 | 
				
			||||||
        genesis_entry_height,
 | 
					        genesis_entry_height,
 | 
				
			||||||
        _last_id,
 | 
					        _last_id,
 | 
				
			||||||
        _last_entry_id,
 | 
					        _last_entry_id,
 | 
				
			||||||
    ) = create_tmp_sample_ledger(
 | 
					    ) = create_tmp_sample_blocktree("test_broadcast_last_tick", &genesis_block, 0);
 | 
				
			||||||
        "test_broadcast_last_tick",
 | 
					 | 
				
			||||||
        10_000,
 | 
					 | 
				
			||||||
        0,
 | 
					 | 
				
			||||||
        bootstrap_leader_info.id,
 | 
					 | 
				
			||||||
        500,
 | 
					 | 
				
			||||||
        ticks_per_slot,
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let genesis_ledger_len = genesis_entry_height;
 | 
					    let genesis_ledger_len = genesis_entry_height;
 | 
				
			||||||
    debug!("genesis_ledger_len: {}", genesis_ledger_len);
 | 
					    debug!("genesis_ledger_len: {}", genesis_ledger_len);
 | 
				
			||||||
@@ -1824,22 +1767,13 @@ fn test_fullnode_rotate(
 | 
				
			|||||||
        info!("validator id: {}", validator_keypair.pubkey());
 | 
					        info!("validator id: {}", validator_keypair.pubkey());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let (mut genesis_block, mint_keypair) =
 | 
				
			||||||
 | 
					        GenesisBlock::new_with_leader(1_000_000_000_000_000_000, leader_keypair.pubkey(), 123);
 | 
				
			||||||
 | 
					    genesis_block.ticks_per_slot = ticks_per_slot;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Make a common mint and a genesis entry for both leader + validator ledgers
 | 
					    // Make a common mint and a genesis entry for both leader + validator ledgers
 | 
				
			||||||
    let (
 | 
					    let (leader_ledger_path, mut tick_height, mut last_entry_height, last_id, mut last_entry_id) =
 | 
				
			||||||
        mint_keypair,
 | 
					        create_tmp_sample_blocktree("test_fullnode_rotate", &genesis_block, 0);
 | 
				
			||||||
        leader_ledger_path,
 | 
					 | 
				
			||||||
        mut tick_height,
 | 
					 | 
				
			||||||
        mut last_entry_height,
 | 
					 | 
				
			||||||
        last_id,
 | 
					 | 
				
			||||||
        mut last_entry_id,
 | 
					 | 
				
			||||||
    ) = create_tmp_sample_ledger(
 | 
					 | 
				
			||||||
        "test_fullnode_rotate",
 | 
					 | 
				
			||||||
        1_000_000_000_000_000_000,
 | 
					 | 
				
			||||||
        0,
 | 
					 | 
				
			||||||
        leader_keypair.pubkey(),
 | 
					 | 
				
			||||||
        123,
 | 
					 | 
				
			||||||
        ticks_per_slot,
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
    assert_eq!(tick_height, 1);
 | 
					    assert_eq!(tick_height, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let mut ledger_paths = Vec::new();
 | 
					    let mut ledger_paths = Vec::new();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,8 @@ extern crate serde_json;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
use bincode::deserialize;
 | 
					use bincode::deserialize;
 | 
				
			||||||
use solana::blocktree::{
 | 
					use solana::blocktree::{
 | 
				
			||||||
    create_tmp_sample_ledger, get_tmp_ledger_path, tmp_copy_ledger, Blocktree, DEFAULT_SLOT_HEIGHT,
 | 
					    create_tmp_sample_blocktree, get_tmp_ledger_path, tmp_copy_ledger, Blocktree,
 | 
				
			||||||
 | 
					    DEFAULT_SLOT_HEIGHT,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use solana::client::mk_client;
 | 
					use solana::client::mk_client;
 | 
				
			||||||
use solana::cluster_info::{ClusterInfo, Node, NodeInfo};
 | 
					use solana::cluster_info::{ClusterInfo, Node, NodeInfo};
 | 
				
			||||||
@@ -17,6 +18,7 @@ use solana::replicator::Replicator;
 | 
				
			|||||||
use solana::storage_stage::STORAGE_ROTATE_TEST_COUNT;
 | 
					use solana::storage_stage::STORAGE_ROTATE_TEST_COUNT;
 | 
				
			||||||
use solana::streamer::blob_receiver;
 | 
					use solana::streamer::blob_receiver;
 | 
				
			||||||
use solana::voting_keypair::VotingKeypair;
 | 
					use solana::voting_keypair::VotingKeypair;
 | 
				
			||||||
 | 
					use solana_sdk::genesis_block::GenesisBlock;
 | 
				
			||||||
use solana_sdk::hash::Hash;
 | 
					use solana_sdk::hash::Hash;
 | 
				
			||||||
use solana_sdk::signature::{Keypair, KeypairUtil};
 | 
					use solana_sdk::signature::{Keypair, KeypairUtil};
 | 
				
			||||||
use solana_sdk::system_transaction::SystemTransaction;
 | 
					use solana_sdk::system_transaction::SystemTransaction;
 | 
				
			||||||
@@ -39,24 +41,13 @@ fn test_replicator_startup_basic() {
 | 
				
			|||||||
    let leader_info = leader_node.info.clone();
 | 
					    let leader_info = leader_node.info.clone();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let leader_ledger_path = "replicator_test_leader_ledger";
 | 
					    let leader_ledger_path = "replicator_test_leader_ledger";
 | 
				
			||||||
    let mut fullnode_config = FullnodeConfig::default();
 | 
					 | 
				
			||||||
    let ticks_per_slot = fullnode_config.ticks_per_slot();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let (
 | 
					    let (genesis_block, mint_keypair) =
 | 
				
			||||||
        mint_keypair,
 | 
					        GenesisBlock::new_with_leader(1_000_000_000, leader_info.id, 42);
 | 
				
			||||||
        leader_ledger_path,
 | 
					    let ticks_per_slot = genesis_block.ticks_per_slot;
 | 
				
			||||||
        _tick_height,
 | 
					
 | 
				
			||||||
        _last_entry_height,
 | 
					    let (leader_ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) =
 | 
				
			||||||
        _last_id,
 | 
					        create_tmp_sample_blocktree(leader_ledger_path, &genesis_block, 0);
 | 
				
			||||||
        _last_entry_id,
 | 
					 | 
				
			||||||
    ) = create_tmp_sample_ledger(
 | 
					 | 
				
			||||||
        leader_ledger_path,
 | 
					 | 
				
			||||||
        1_000_000_000,
 | 
					 | 
				
			||||||
        0,
 | 
					 | 
				
			||||||
        leader_info.id,
 | 
					 | 
				
			||||||
        42,
 | 
					 | 
				
			||||||
        ticks_per_slot,
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let validator_ledger_path = tmp_copy_ledger(
 | 
					    let validator_ledger_path = tmp_copy_ledger(
 | 
				
			||||||
        &leader_ledger_path,
 | 
					        &leader_ledger_path,
 | 
				
			||||||
@@ -67,6 +58,7 @@ fn test_replicator_startup_basic() {
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        let voting_keypair = VotingKeypair::new_local(&leader_keypair);
 | 
					        let voting_keypair = VotingKeypair::new_local(&leader_keypair);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let mut fullnode_config = FullnodeConfig::default();
 | 
				
			||||||
        fullnode_config.storage_rotate_count = STORAGE_ROTATE_TEST_COUNT;
 | 
					        fullnode_config.storage_rotate_count = STORAGE_ROTATE_TEST_COUNT;
 | 
				
			||||||
        let leader = Fullnode::new(
 | 
					        let leader = Fullnode::new(
 | 
				
			||||||
            leader_node,
 | 
					            leader_node,
 | 
				
			||||||
@@ -294,23 +286,10 @@ fn test_replicator_startup_ledger_hang() {
 | 
				
			|||||||
    let leader_info = leader_node.info.clone();
 | 
					    let leader_info = leader_node.info.clone();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let leader_ledger_path = "replicator_test_leader_ledger";
 | 
					    let leader_ledger_path = "replicator_test_leader_ledger";
 | 
				
			||||||
    let fullnode_config = FullnodeConfig::default();
 | 
					    let (genesis_block, _mint_keypair) = GenesisBlock::new_with_leader(100, leader_info.id, 42);
 | 
				
			||||||
    let ticks_per_slot = fullnode_config.ticks_per_slot();
 | 
					    let ticks_per_slot = genesis_block.ticks_per_slot;
 | 
				
			||||||
    let (
 | 
					    let (leader_ledger_path, _tick_height, _last_entry_height, _last_id, _last_entry_id) =
 | 
				
			||||||
        _mint_keypair,
 | 
					        create_tmp_sample_blocktree(leader_ledger_path, &genesis_block, 0);
 | 
				
			||||||
        leader_ledger_path,
 | 
					 | 
				
			||||||
        _tick_height,
 | 
					 | 
				
			||||||
        _last_entry_height,
 | 
					 | 
				
			||||||
        _last_id,
 | 
					 | 
				
			||||||
        _last_entry_id,
 | 
					 | 
				
			||||||
    ) = create_tmp_sample_ledger(
 | 
					 | 
				
			||||||
        leader_ledger_path,
 | 
					 | 
				
			||||||
        100,
 | 
					 | 
				
			||||||
        0,
 | 
					 | 
				
			||||||
        leader_info.id,
 | 
					 | 
				
			||||||
        42,
 | 
					 | 
				
			||||||
        ticks_per_slot,
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let validator_ledger_path = tmp_copy_ledger(
 | 
					    let validator_ledger_path = tmp_copy_ledger(
 | 
				
			||||||
        &leader_ledger_path,
 | 
					        &leader_ledger_path,
 | 
				
			||||||
@@ -321,6 +300,7 @@ fn test_replicator_startup_ledger_hang() {
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        let voting_keypair = VotingKeypair::new_local(&leader_keypair);
 | 
					        let voting_keypair = VotingKeypair::new_local(&leader_keypair);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let fullnode_config = FullnodeConfig::default();
 | 
				
			||||||
        let _ = Fullnode::new(
 | 
					        let _ = Fullnode::new(
 | 
				
			||||||
            leader_node,
 | 
					            leader_node,
 | 
				
			||||||
            &leader_keypair,
 | 
					            &leader_keypair,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user