diff --git a/cli/src/nonce.rs b/cli/src/nonce.rs index b12399bcc..6e84bc0e4 100644 --- a/cli/src/nonce.rs +++ b/cli/src/nonce.rs @@ -206,7 +206,7 @@ impl NonceSubCommands for App<'_, '_> { .value_name("NONCE ACCOUNT") .takes_value(true) .required(true) - .validator(is_keypair_or_ask_keyword) + .validator(is_valid_signer) .help("Nonce account to withdraw from"), ) .arg( diff --git a/cli/src/stake.rs b/cli/src/stake.rs index 73c4ee4be..a15f9144d 100644 --- a/cli/src/stake.rs +++ b/cli/src/stake.rs @@ -269,7 +269,7 @@ impl StakeSubCommands for App<'_, '_> { .value_name("SPLIT STAKE ACCOUNT") .takes_value(true) .required(true) - .validator(is_keypair_or_ask_keyword) + .validator(is_valid_signer) .help("Keypair of the new stake account to split funds into") ) .arg( diff --git a/cli/src/storage.rs b/cli/src/storage.rs index 1f6595c90..de837a508 100644 --- a/cli/src/storage.rs +++ b/cli/src/storage.rs @@ -1,6 +1,7 @@ use crate::cli::{ - check_account_for_fee, check_unique_pubkeys, log_instruction_custom_error, CliCommand, - CliCommandInfo, CliConfig, CliError, ProcessResult, SignerIndex, + check_account_for_fee, check_unique_pubkeys, generate_unique_signers, + log_instruction_custom_error, CliCommand, CliCommandInfo, CliConfig, CliError, ProcessResult, + SignerIndex, }; use clap::{App, Arg, ArgMatches, SubCommand}; use solana_clap_utils::{input_parsers::*, input_validators::*, keypair::signer_from_path}; @@ -36,7 +37,7 @@ impl StorageSubCommands for App<'_, '_> { .value_name("STORAGE ACCOUNT") .takes_value(true) .required(true) - .validator(is_keypair_or_ask_keyword), + .validator(is_valid_signer), ), ) .subcommand( @@ -56,7 +57,7 @@ impl StorageSubCommands for App<'_, '_> { .value_name("STORAGE ACCOUNT") .takes_value(true) .required(true) - .validator(is_keypair_or_ask_keyword), + .validator(is_valid_signer), ), ) .subcommand( @@ -104,17 +105,24 @@ pub fn parse_storage_create_archiver_account( wallet_manager: Option<&Arc>, ) -> Result { let account_owner = pubkey_of(matches, "storage_account_owner").unwrap(); - let storage_account = keypair_of(matches, "storage_account").unwrap(); + let (storage_account, storage_account_pubkey) = + signer_of(matches, "storage_account", wallet_manager)?; + + let payer_provided = None; + let signer_info = generate_unique_signers( + vec![payer_provided, storage_account], + matches, + default_signer_path, + wallet_manager, + )?; + Ok(CliCommandInfo { command: CliCommand::CreateStorageAccount { account_owner, - storage_account: 1, + storage_account: signer_info.index_of(storage_account_pubkey).unwrap(), account_type: StorageAccountType::Archiver, }, - signers: vec![ - signer_from_path(matches, default_signer_path, "keypair", wallet_manager)?, - storage_account.into(), - ], + signers: signer_info.signers, }) } @@ -124,17 +132,24 @@ pub fn parse_storage_create_validator_account( wallet_manager: Option<&Arc>, ) -> Result { let account_owner = pubkey_of(matches, "storage_account_owner").unwrap(); - let storage_account = keypair_of(matches, "storage_account").unwrap(); + let (storage_account, storage_account_pubkey) = + signer_of(matches, "storage_account", wallet_manager)?; + + let payer_provided = None; + let signer_info = generate_unique_signers( + vec![payer_provided, storage_account], + matches, + default_signer_path, + wallet_manager, + )?; + Ok(CliCommandInfo { command: CliCommand::CreateStorageAccount { account_owner, - storage_account: 1, + storage_account: signer_info.index_of(storage_account_pubkey).unwrap(), account_type: StorageAccountType::Validator, }, - signers: vec![ - signer_from_path(matches, default_signer_path, "keypair", wallet_manager)?, - storage_account.into(), - ], + signers: signer_info.signers, }) } diff --git a/cli/src/vote.rs b/cli/src/vote.rs index 5300aacfe..9d8679b45 100644 --- a/cli/src/vote.rs +++ b/cli/src/vote.rs @@ -36,7 +36,7 @@ impl VoteSubCommands for App<'_, '_> { .value_name("VOTE ACCOUNT KEYPAIR") .takes_value(true) .required(true) - .validator(is_keypair_or_ask_keyword) + .validator(is_valid_signer) .help("Vote account keypair to fund"), ) .arg( @@ -107,7 +107,7 @@ impl VoteSubCommands for App<'_, '_> { .value_name("AUTHORIZED VOTER KEYPAIR") .takes_value(true) .required(true) - .validator(is_keypair) + .validator(is_valid_signer) .help("Authorized voter keypair"), ) )