From 6a68df3ebd5490624c693db3111c7210cea42edf Mon Sep 17 00:00:00 2001 From: Greg Fitzgerald Date: Thu, 14 Mar 2019 20:18:28 -0600 Subject: [PATCH] Don't resign airdrop requests with the keypair asking for an airdrop The correct thing to do here is retry until you get a BlockhashNotFound error, and then send another request to the drone for a new signed transaction. Also, this test is an integration test masquerading as a unit-test.. --- wallet/src/wallet.rs | 22 ++++++++++------------ wallet/tests/pay.rs | 6 +++--- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/wallet/src/wallet.rs b/wallet/src/wallet.rs index 050d41c135..534c0061ee 100644 --- a/wallet/src/wallet.rs +++ b/wallet/src/wallet.rs @@ -383,7 +383,7 @@ fn process_airdrop( ))?, }; - request_and_confirm_airdrop(&rpc_client, &drone_addr, &config.id, lamports)?; + request_and_confirm_airdrop(&rpc_client, &drone_addr, &config.id.pubkey(), lamports)?; let current_balance = rpc_client .retry_get_balance(1, &config.id.pubkey(), 5)? @@ -654,7 +654,7 @@ fn process_time_elapsed( let balance = rpc_client.retry_get_balance(1, &config.id.pubkey(), 5)?; if let Some(0) = balance { - request_and_confirm_airdrop(&rpc_client, &drone_addr, &config.id, 1)?; + request_and_confirm_airdrop(&rpc_client, &drone_addr, &config.id.pubkey(), 1)?; } let blockhash = get_recent_blockhash(&rpc_client)?; @@ -675,7 +675,7 @@ fn process_witness( let balance = rpc_client.retry_get_balance(1, &config.id.pubkey(), 5)?; if let Some(0) = balance { - request_and_confirm_airdrop(&rpc_client, &drone_addr, &config.id, 1)?; + request_and_confirm_airdrop(&rpc_client, &drone_addr, &config.id.pubkey(), 1)?; } let blockhash = get_recent_blockhash(&rpc_client)?; @@ -983,12 +983,13 @@ fn resign_transaction( pub fn request_and_confirm_airdrop( rpc_client: &RpcClient, drone_addr: &SocketAddr, - signer: &Keypair, + to_pubkey: &Pubkey, lamports: u64, ) -> Result<(), Box> { let blockhash = get_recent_blockhash(rpc_client)?; - let mut tx = request_airdrop_transaction(drone_addr, &signer.pubkey(), lamports, blockhash)?; - send_and_confirm_transaction(rpc_client, &mut tx, signer)?; + let tx = request_airdrop_transaction(drone_addr, &to_pubkey, lamports, blockhash)?; + let signature_str = send_transaction(rpc_client, &tx)?; + confirm_transaction(rpc_client, &signature_str)?; Ok(()) } @@ -1766,17 +1767,14 @@ mod tests { fn test_request_and_confirm_airdrop() { let rpc_client = RpcClient::new("succeeds".to_string()); let drone_addr = socketaddr!(0, 0); - let keypair = Keypair::new(); + let pubkey = Keypair::new().pubkey(); let lamports = 50; assert_eq!( - request_and_confirm_airdrop(&rpc_client, &drone_addr, &keypair, lamports).unwrap(), + request_and_confirm_airdrop(&rpc_client, &drone_addr, &pubkey, lamports).unwrap(), () ); - let rpc_client = RpcClient::new("account_in_use".to_string()); - assert!(request_and_confirm_airdrop(&rpc_client, &drone_addr, &keypair, lamports).is_err()); - let lamports = 0; - assert!(request_and_confirm_airdrop(&rpc_client, &drone_addr, &keypair, lamports).is_err()); + assert!(request_and_confirm_airdrop(&rpc_client, &drone_addr, &pubkey, lamports).is_err()); } } diff --git a/wallet/tests/pay.rs b/wallet/tests/pay.rs index 0dd950e387..6075b6aeb1 100644 --- a/wallet/tests/pay.rs +++ b/wallet/tests/pay.rs @@ -39,7 +39,7 @@ fn test_wallet_timestamp_tx() { assert_ne!(config_payer.id.pubkey(), config_witness.id.pubkey()); - request_and_confirm_airdrop(&rpc_client, &drone_addr, &config_payer.id, 50).unwrap(); + request_and_confirm_airdrop(&rpc_client, &drone_addr, &config_payer.id.pubkey(), 50).unwrap(); check_balance(50, &rpc_client, &config_payer.id.pubkey()); // Make transaction (from config_payer to bob_pubkey) requiring timestamp from config_witness @@ -99,7 +99,7 @@ fn test_wallet_witness_tx() { assert_ne!(config_payer.id.pubkey(), config_witness.id.pubkey()); - request_and_confirm_airdrop(&rpc_client, &drone_addr, &config_payer.id, 50).unwrap(); + request_and_confirm_airdrop(&rpc_client, &drone_addr, &config_payer.id.pubkey(), 50).unwrap(); // Make transaction (from config_payer to bob_pubkey) requiring witness signature from config_witness config_payer.command = WalletCommand::Pay( @@ -156,7 +156,7 @@ fn test_wallet_cancel_tx() { assert_ne!(config_payer.id.pubkey(), config_witness.id.pubkey()); - request_and_confirm_airdrop(&rpc_client, &drone_addr, &config_payer.id, 50).unwrap(); + request_and_confirm_airdrop(&rpc_client, &drone_addr, &config_payer.id.pubkey(), 50).unwrap(); // Make transaction (from config_payer to bob_pubkey) requiring witness signature from config_witness config_payer.command = WalletCommand::Pay(