From 0cdb315b5b42ea276a8807271e4d8cd183ed05f3 Mon Sep 17 00:00:00 2001 From: Tyera Date: Wed, 15 Mar 2023 22:59:56 -0600 Subject: [PATCH] Make redelegate signer more optional (#30734) --- cli/src/cli.rs | 6 +++--- cli/src/stake.rs | 40 ++++++++++++++++++++++------------------ cli/tests/stake.rs | 18 +++++++++--------- 3 files changed, 34 insertions(+), 30 deletions(-) diff --git a/cli/src/cli.rs b/cli/src/cli.rs index 015375ecd6..07f31242dd 100644 --- a/cli/src/cli.rs +++ b/cli/src/cli.rs @@ -214,7 +214,7 @@ pub enum CliCommand { nonce_authority: SignerIndex, memo: Option, fee_payer: SignerIndex, - redelegation_stake_account_pubkey: Option, + redelegation_stake_account: Option, compute_unit_price: Option, }, SplitStake { @@ -1172,7 +1172,7 @@ pub fn process_command(config: &CliConfig) -> ProcessResult { nonce_authority, memo, fee_payer, - redelegation_stake_account_pubkey, + redelegation_stake_account, compute_unit_price, } => process_delegate_stake( &rpc_client, @@ -1188,7 +1188,7 @@ pub fn process_command(config: &CliConfig) -> ProcessResult { *nonce_authority, memo.as_ref(), *fee_payer, - redelegation_stake_account_pubkey.as_ref(), + *redelegation_stake_account, compute_unit_price.as_ref(), ), CliCommand::SplitStake { diff --git a/cli/src/stake.rs b/cli/src/stake.rs index 05192544cf..f5c4444af7 100644 --- a/cli/src/stake.rs +++ b/cli/src/stake.rs @@ -828,10 +828,13 @@ pub fn parse_stake_delegate_stake( signer_of(matches, NONCE_AUTHORITY_ARG.name, wallet_manager)?; let (fee_payer, fee_payer_pubkey) = signer_of(matches, FEE_PAYER_ARG.name, wallet_manager)?; - let mut bulk_signers = vec![stake_authority, fee_payer, redelegation_stake_account]; + let mut bulk_signers = vec![stake_authority, fee_payer]; if nonce_account.is_some() { bulk_signers.push(nonce_authority); } + if redelegation_stake_account.is_some() { + bulk_signers.push(redelegation_stake_account); + } let signer_info = default_signer.generate_unique_signers(bulk_signers, matches, wallet_manager)?; let compute_unit_price = value_of(matches, COMPUTE_UNIT_PRICE_ARG.name); @@ -849,7 +852,8 @@ pub fn parse_stake_delegate_stake( nonce_authority: signer_info.index_of(nonce_authority_pubkey).unwrap(), memo, fee_payer: signer_info.index_of(fee_payer_pubkey).unwrap(), - redelegation_stake_account_pubkey, + redelegation_stake_account: redelegation_stake_account_pubkey + .and_then(|_| signer_info.index_of(redelegation_stake_account_pubkey)), compute_unit_price, }, signers: signer_info.signers, @@ -2488,25 +2492,26 @@ pub fn process_delegate_stake( nonce_authority: SignerIndex, memo: Option<&String>, fee_payer: SignerIndex, - redelegation_stake_account_pubkey: Option<&Pubkey>, + redelegation_stake_account: Option, compute_unit_price: Option<&u64>, ) -> ProcessResult { check_unique_pubkeys( (&config.signers[0].pubkey(), "cli keypair".to_string()), (stake_account_pubkey, "stake_account_pubkey".to_string()), )?; - if let Some(redelegation_stake_account_pubkey) = &redelegation_stake_account_pubkey { + let redelegation_stake_account = redelegation_stake_account.map(|index| config.signers[index]); + if let Some(redelegation_stake_account) = &redelegation_stake_account { check_unique_pubkeys( (stake_account_pubkey, "stake_account_pubkey".to_string()), ( - redelegation_stake_account_pubkey, + &redelegation_stake_account.pubkey(), "redelegation_stake_account".to_string(), ), )?; check_unique_pubkeys( (&config.signers[0].pubkey(), "cli keypair".to_string()), ( - redelegation_stake_account_pubkey, + &redelegation_stake_account.pubkey(), "redelegation_stake_account".to_string(), ), )?; @@ -2561,12 +2566,12 @@ pub fn process_delegate_stake( let recent_blockhash = blockhash_query.get_blockhash(rpc_client, config.commitment)?; - let ixs = if let Some(redelegation_stake_account_pubkey) = &redelegation_stake_account_pubkey { + let ixs = if let Some(redelegation_stake_account) = &redelegation_stake_account { stake_instruction::redelegate( stake_account_pubkey, &stake_authority.pubkey(), vote_account_pubkey, - redelegation_stake_account_pubkey, + &redelegation_stake_account.pubkey(), ) } else { vec![stake_instruction::delegate_stake( @@ -3997,7 +4002,7 @@ mod tests { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }, signers: vec![read_keypair_file(&default_keypair_file).unwrap().into()], @@ -4030,7 +4035,7 @@ mod tests { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }, signers: vec![ @@ -4065,7 +4070,7 @@ mod tests { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }, signers: vec![read_keypair_file(&default_keypair_file).unwrap().into()], @@ -4101,7 +4106,7 @@ mod tests { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }, signers: vec![read_keypair_file(&default_keypair_file).unwrap().into()], @@ -4132,7 +4137,7 @@ mod tests { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }, signers: vec![read_keypair_file(&default_keypair_file).unwrap().into()], @@ -4173,7 +4178,7 @@ mod tests { nonce_authority: 0, memo: None, fee_payer: 1, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }, signers: vec![ @@ -4223,7 +4228,7 @@ mod tests { nonce_authority: 2, memo: None, fee_payer: 1, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }, signers: vec![ @@ -4261,7 +4266,7 @@ mod tests { nonce_authority: 0, memo: None, fee_payer: 1, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }, signers: vec![ @@ -4281,7 +4286,6 @@ mod tests { redelegation_stake_account_tmp_file.as_file_mut(), ) .unwrap(); - let redelegation_stake_account_pubkey = redelegation_stake_account_keypair.pubkey(); let test_redelegate_stake = test_commands.clone().get_matches_from(vec![ "test", @@ -4305,7 +4309,7 @@ mod tests { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: Some(redelegation_stake_account_pubkey), + redelegation_stake_account: Some(1), compute_unit_price: None, }, signers: vec![ diff --git a/cli/tests/stake.rs b/cli/tests/stake.rs index 19cc288629..b009cbe6c7 100644 --- a/cli/tests/stake.rs +++ b/cli/tests/stake.rs @@ -152,7 +152,7 @@ fn test_stake_redelegation() { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }; process_command(&config).unwrap(); @@ -216,7 +216,7 @@ fn test_stake_redelegation() { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: Some(stake2_keypair.pubkey()), + redelegation_stake_account: Some(1), compute_unit_price: None, }; process_command(&config).unwrap(); @@ -371,7 +371,7 @@ fn test_stake_delegation_force() { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }; process_command(&config).unwrap_err(); @@ -389,7 +389,7 @@ fn test_stake_delegation_force() { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }; process_command(&config).unwrap(); @@ -468,7 +468,7 @@ fn test_seed_stake_delegation_and_deactivation() { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }; process_command(&config_validator).unwrap(); @@ -560,7 +560,7 @@ fn test_stake_delegation_and_deactivation() { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }; process_command(&config_validator).unwrap(); @@ -676,7 +676,7 @@ fn test_offline_stake_delegation_and_deactivation() { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }; config_offline.output_format = OutputFormat::JsonCompact; @@ -699,7 +699,7 @@ fn test_offline_stake_delegation_and_deactivation() { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }; process_command(&config_payer).unwrap(); @@ -837,7 +837,7 @@ fn test_nonced_stake_delegation_and_deactivation() { nonce_authority: 0, memo: None, fee_payer: 0, - redelegation_stake_account_pubkey: None, + redelegation_stake_account: None, compute_unit_price: None, }; process_command(&config).unwrap();