Submit leader's vote after observing 2/3 validator votes (#780)

* fixup!

* fixups!

* send the vote and count it

* actually vote

* test

* Spelling fixes

* Process the voting transaction in the leader's bank

* Send tokens to the leader

* Give leader tokens in more cases

* Test for write_stage::leader_vote

* Request airdrop inside fullnode and not the script

* Change readme to indicate that drone should be up before leader

And start drone before leader in snap scripts

* Rename _kp => _keypair for keypairs and other review fixups

* Remove empty else
* tweak test_leader_vote numbers to be closer to testing 2/3 boundary
* combine creating blob and transaction for leader/validator
This commit is contained in:
sakridge
2018-07-31 22:07:53 -07:00
committed by anatoly yakovenko
parent 7c5172a65e
commit 2ea6f86199
21 changed files with 463 additions and 229 deletions

View File

@ -91,7 +91,9 @@ fn test_multi_node_validator_catchup_from_zero() {
logger::setup();
const N: usize = 5;
trace!("test_multi_node_validator_catchup_from_zero");
let leader = TestNode::new_localhost();
let leader_keypair = KeyPair::new();
let leader_pubkey = leader_keypair.pubkey().clone();
let leader = TestNode::new_localhost_with_pubkey(leader_keypair.pubkey());
let leader_data = leader.data.clone();
let bob_pubkey = KeyPair::new().pubkey();
@ -100,9 +102,15 @@ fn test_multi_node_validator_catchup_from_zero() {
leader,
true,
LedgerFile::Path(ledger_path.clone()),
None,
leader_keypair,
None,
);
// Send leader some tokens to vote
let leader_balance =
send_tx_and_retry_get_balance(&leader_data, &alice, &leader_pubkey, None).unwrap();
info!("leader balance {}", leader_balance);
let mut nodes = vec![server];
for _ in 0..N {
let keypair = KeyPair::new();
@ -111,7 +119,7 @@ fn test_multi_node_validator_catchup_from_zero() {
validator,
false,
LedgerFile::Path(ledger_path.clone()),
Some(keypair),
keypair,
Some(leader_data.contact_info.ncp),
);
nodes.push(val);
@ -145,7 +153,7 @@ fn test_multi_node_validator_catchup_from_zero() {
validator,
false,
LedgerFile::Path(ledger_path.clone()),
Some(keypair),
keypair,
Some(leader_data.contact_info.ncp),
);
nodes.push(val);
@ -191,7 +199,9 @@ fn test_multi_node_basic() {
logger::setup();
const N: usize = 5;
trace!("test_multi_node_basic");
let leader = TestNode::new_localhost();
let leader_keypair = KeyPair::new();
let leader_pubkey = leader_keypair.pubkey().clone();
let leader = TestNode::new_localhost_with_pubkey(leader_keypair.pubkey());
let leader_data = leader.data.clone();
let bob_pubkey = KeyPair::new().pubkey();
let (alice, ledger_path) = genesis(10_000);
@ -199,9 +209,15 @@ fn test_multi_node_basic() {
leader,
true,
LedgerFile::Path(ledger_path.clone()),
None,
leader_keypair,
None,
);
// Send leader some tokens to vote
let leader_balance =
send_tx_and_retry_get_balance(&leader_data, &alice, &leader_pubkey, None).unwrap();
info!("leader balance {}", leader_balance);
let mut nodes = vec![server];
for _ in 0..N {
let keypair = KeyPair::new();
@ -210,7 +226,7 @@ fn test_multi_node_basic() {
validator,
false,
LedgerFile::Path(ledger_path.clone()),
Some(keypair),
keypair,
Some(leader_data.contact_info.ncp),
);
nodes.push(val);
@ -244,7 +260,8 @@ fn test_multi_node_basic() {
#[test]
fn test_boot_validator_from_file() {
logger::setup();
let leader = TestNode::new_localhost();
let leader_keypair = KeyPair::new();
let leader = TestNode::new_localhost_with_pubkey(leader_keypair.pubkey());
let bob_pubkey = KeyPair::new().pubkey();
let (alice, ledger_path) = genesis(100_000);
let leader_data = leader.data.clone();
@ -252,7 +269,7 @@ fn test_boot_validator_from_file() {
leader,
true,
LedgerFile::Path(ledger_path.clone()),
None,
leader_keypair,
None,
);
let leader_balance =
@ -269,7 +286,7 @@ fn test_boot_validator_from_file() {
validator,
false,
LedgerFile::Path(ledger_path.clone()),
Some(keypair),
keypair,
Some(leader_data.contact_info.ncp),
);
let mut client = mk_client(&validator_data);
@ -282,13 +299,14 @@ fn test_boot_validator_from_file() {
}
fn create_leader(ledger_path: &str) -> (NodeInfo, FullNode) {
let leader = TestNode::new_localhost();
let leader_keypair = KeyPair::new();
let leader = TestNode::new_localhost_with_pubkey(leader_keypair.pubkey());
let leader_data = leader.data.clone();
let leader_fullnode = FullNode::new(
leader,
true,
LedgerFile::Path(ledger_path.to_string()),
None,
leader_keypair,
None,
);
(leader_data, leader_fullnode)
@ -339,7 +357,7 @@ fn test_leader_restart_validator_start_from_old_ledger() {
validator,
false,
LedgerFile::Path(stale_ledger_path.clone()),
Some(keypair),
keypair,
Some(leader_data.contact_info.ncp),
);
@ -387,7 +405,9 @@ fn test_multi_node_dynamic_network() {
Err(_) => std::usize::MAX,
};
let leader = TestNode::new_localhost();
let leader_keypair = KeyPair::new();
let leader_pubkey = leader_keypair.pubkey().clone();
let leader = TestNode::new_localhost_with_pubkey(leader_keypair.pubkey());
let bob_pubkey = KeyPair::new().pubkey();
let (alice, ledger_path) = genesis(10_000_000);
let alice_arc = Arc::new(RwLock::new(alice));
@ -396,9 +416,19 @@ fn test_multi_node_dynamic_network() {
leader,
true,
LedgerFile::Path(ledger_path.clone()),
None,
leader_keypair,
None,
);
// Send leader some tokens to vote
let leader_balance = send_tx_and_retry_get_balance(
&leader_data,
&alice_arc.read().unwrap(),
&leader_pubkey,
None,
).unwrap();
info!("leader balance {}", leader_balance);
info!("{:x} LEADER", leader_data.debug_id());
let leader_balance = retry_send_tx_and_retry_get_balance(
&leader_data,
@ -464,7 +494,7 @@ fn test_multi_node_dynamic_network() {
validator,
false,
LedgerFile::Path(ledger_path.clone()),
Some(keypair),
keypair,
Some(leader_data.contact_info.ncp),
);
(rd, val)