diff --git a/book/src/api-reference/cli.md b/book/src/api-reference/cli.md index c4e68ea11f..c882442a3d 100644 --- a/book/src/api-reference/cli.md +++ b/book/src/api-reference/cli.md @@ -322,13 +322,16 @@ FLAGS: -v, --verbose Show extra information header OPTIONS: - --ask-seed-phrase Securely recover a keypair using a seed phrase and optional passphrase - [possible values: keypair] - -C, --config Configuration file to use [default: - ~/.config/solana/cli/config.yml] - -u, --url JSON RPC URL for the solana cluster - -k, --keypair /path/to/id.json - --nonce-authority Specify nonce authority if different from account + --ask-seed-phrase + Recover a keypair using a seed phrase and optional passphrase [possible values: keypair] + + -C, --config + Configuration file to use [default: ~/.config/solana/cli/config.yml] + + -u, --url JSON RPC URL for the solana cluster + -k, --keypair /path/to/id.json + --nonce-authority + Provide the nonce authority keypair to use when signing a nonced transaction ARGS: Address of the nonce account @@ -694,20 +697,25 @@ FLAGS: -v, --verbose Show extra information header OPTIONS: - --ask-seed-phrase Securely recover a keypair using a seed phrase and optional passphrase - [possible values: keypair] - --blockhash Use the supplied blockhash - -C, --config Configuration file to use [default: - ~/.config/solana/cli/config.yml] - -u, --url JSON RPC URL for the solana cluster - -k, --keypair /path/to/id.json - --nonce Provide the nonce account to use when creating a nonced - transaction. Nonced transactions are useful when a transaction - requires a lengthy signing process. Learn more about nonced - transactions at https://docs.solana.com/offline-signing/durable-nonce - --nonce-authority Provide the nonce authority keypair to use when signing a nonced - transaction - --signer ... Provide a public-key/signature pair for the transaction + --ask-seed-phrase + Recover a keypair using a seed phrase and optional passphrase [possible values: keypair] + + --blockhash Use the supplied blockhash + -C, --config + Configuration file to use [default: ~/.config/solana/cli/config.yml] + + -u, --url JSON RPC URL for the solana cluster + -k, --keypair /path/to/id.json + --nonce + Provide the nonce account to use when creating a nonced + transaction. Nonced transactions are useful when a transaction + requires a lengthy signing process. Learn more about nonced + transactions at https://docs.solana.com/offline-signing/durable-nonce + --nonce-authority + Provide the nonce authority keypair to use when signing a nonced transaction + + --signer ... Provide a public-key/signature pair for the transaction + --stake-authority Public key of authorized staker (defaults to cli config pubkey) ARGS: Stake account to be deactivated. @@ -730,20 +738,25 @@ FLAGS: -v, --verbose Show extra information header OPTIONS: - --ask-seed-phrase Securely recover a keypair using a seed phrase and optional passphrase - [possible values: keypair] - --blockhash Use the supplied blockhash - -C, --config Configuration file to use [default: - ~/.config/solana/cli/config.yml] - -u, --url JSON RPC URL for the solana cluster - -k, --keypair /path/to/id.json - --nonce Provide the nonce account to use when creating a nonced - transaction. Nonced transactions are useful when a transaction - requires a lengthy signing process. Learn more about nonced - transactions at https://docs.solana.com/offline-signing/durable-nonce - --nonce-authority Provide the nonce authority keypair to use when signing a nonced - transaction - --signer ... Provide a public-key/signature pair for the transaction + --ask-seed-phrase + Recover a keypair using a seed phrase and optional passphrase [possible values: keypair] + + --blockhash Use the supplied blockhash + -C, --config + Configuration file to use [default: ~/.config/solana/cli/config.yml] + + -u, --url JSON RPC URL for the solana cluster + -k, --keypair /path/to/id.json + --nonce + Provide the nonce account to use when creating a nonced + transaction. Nonced transactions are useful when a transaction + requires a lengthy signing process. Learn more about nonced + transactions at https://docs.solana.com/offline-signing/durable-nonce + --nonce-authority + Provide the nonce authority keypair to use when signing a nonced transaction + + --signer ... Provide a public-key/signature pair for the transaction + --stake-authority Public key of authorized staker (defaults to cli config pubkey) ARGS: Stake account to delegate @@ -1009,13 +1022,17 @@ FLAGS: -v, --verbose Show extra information header OPTIONS: - --ask-seed-phrase Securely recover a keypair using a seed phrase and optional passphrase - [possible values: keypair] - -C, --config Configuration file to use [default: - ~/.config/solana/cli/config.yml] - -u, --url JSON RPC URL for the solana cluster - -k, --keypair /path/to/id.json - --nonce-authority Specify nonce authority if different from account + --ask-seed-phrase + Recover a keypair using a seed phrase and optional passphrase [possible values: keypair] + + -C, --config + Configuration file to use [default: ~/.config/solana/cli/config.yml] + + -u, --url JSON RPC URL for the solana cluster + -k, --keypair /path/to/id.json + --nonce-authority + Provide the nonce authority keypair to use when signing a nonced transaction + ARGS: Address of the nonce account @@ -1039,23 +1056,27 @@ FLAGS: -v, --verbose Show extra information header OPTIONS: - --ask-seed-phrase Securely recover a keypair using a seed phrase and optional passphrase - [possible values: keypair] - --blockhash Use the supplied blockhash - -C, --config Configuration file to use [default: - ~/.config/solana/cli/config.yml] - -u, --url JSON RPC URL for the solana cluster - -k, --keypair /path/to/id.json - --nonce Provide the nonce account to use when creating a nonced - transaction. Nonced transactions are useful when a transaction - requires a lengthy signing process. Learn more about nonced - transactions at https://docs.solana.com/offline-signing/durable-nonce - --nonce-authority Provide the nonce authority keypair to use when signing a nonced - transaction - --signer ... Provide a public-key/signature pair for the transaction - --after A timestamp after which transaction will execute - --require-timestamp-from Require timestamp from this third party - --require-signature-from ... Any third party signatures required to unlock the lamports + --ask-seed-phrase + Recover a keypair using a seed phrase and optional passphrase [possible values: keypair] + + --blockhash Use the supplied blockhash + -C, --config + Configuration file to use [default: ~/.config/solana/cli/config.yml] + + -u, --url JSON RPC URL for the solana cluster + -k, --keypair /path/to/id.json + --nonce + Provide the nonce account to use when creating a nonced + transaction. Nonced transactions are useful when a transaction + requires a lengthy signing process. Learn more about nonced + transactions at https://docs.solana.com/offline-signing/durable-nonce + --nonce-authority + Provide the nonce authority keypair to use when signing a nonced transaction + + --signer ... Provide a public-key/signature pair for the transaction + --after A timestamp after which transaction will execute + --require-timestamp-from Require timestamp from this third party + --require-signature-from ... Any third party signatures required to unlock the lamports ARGS: The pubkey of recipient @@ -1431,12 +1452,25 @@ FLAGS: -v, --verbose Show extra information header OPTIONS: - --ask-seed-phrase Securely recover a keypair using a seed phrase and optional passphrase - [possible values: keypair] - -C, --config Configuration file to use [default: - ~/.config/solana/cli/config.yml] - -u, --url JSON RPC URL for the solana cluster - -k, --keypair /path/to/id.json + --ask-seed-phrase + Recover a keypair using a seed phrase and optional passphrase [possible values: keypair] + + --blockhash Use the supplied blockhash + -C, --config + Configuration file to use [default: ~/.config/solana/cli/config.yml] + + -u, --url JSON RPC URL for the solana cluster + -k, --keypair /path/to/id.json + --nonce + Provide the nonce account to use when creating a nonced + transaction. Nonced transactions are useful when a transaction + requires a lengthy signing process. Learn more about nonced + transactions at https://docs.solana.com/offline-signing/durable-nonce + --nonce-authority + Provide the nonce authority keypair to use when signing a nonced transaction + + --signer ... Provide a public-key/signature pair for the transaction + --stake-authority Public key of authorized staker (defaults to cli config pubkey) ARGS: Stake account in which to set the authorized staker @@ -1459,12 +1493,25 @@ FLAGS: -v, --verbose Show extra information header OPTIONS: - --ask-seed-phrase Securely recover a keypair using a seed phrase and optional passphrase - [possible values: keypair] - -C, --config Configuration file to use [default: - ~/.config/solana/cli/config.yml] - -u, --url JSON RPC URL for the solana cluster - -k, --keypair /path/to/id.json + --ask-seed-phrase + Recover a keypair using a seed phrase and optional passphrase [possible values: keypair] + + --blockhash Use the supplied blockhash + -C, --config + Configuration file to use [default: ~/.config/solana/cli/config.yml] + + -u, --url JSON RPC URL for the solana cluster + -k, --keypair /path/to/id.json + --nonce + Provide the nonce account to use when creating a nonced + transaction. Nonced transactions are useful when a transaction + requires a lengthy signing process. Learn more about nonced + transactions at https://docs.solana.com/offline-signing/durable-nonce + --nonce-authority + Provide the nonce authority keypair to use when signing a nonced transaction + + --signer ... Provide a public-key/signature pair for the transaction + --withdraw-authority Public key of authorized withdrawer (defaults to cli config pubkey) ARGS: Stake account in which to set the authorized withdrawer @@ -1630,13 +1677,17 @@ FLAGS: -v, --verbose Show extra information header OPTIONS: - --ask-seed-phrase Securely recover a keypair using a seed phrase and optional passphrase - [possible values: keypair] - -C, --config Configuration file to use [default: - ~/.config/solana/cli/config.yml] - -u, --url JSON RPC URL for the solana cluster - -k, --keypair /path/to/id.json - --nonce-authority Specify nonce authority if different from account + --ask-seed-phrase + Recover a keypair using a seed phrase and optional passphrase [possible values: keypair] + + -C, --config + Configuration file to use [default: ~/.config/solana/cli/config.yml] + + -u, --url JSON RPC URL for the solana cluster + -k, --keypair /path/to/id.json + --nonce-authority + Provide the nonce authority keypair to use when signing a nonced transaction + ARGS: Nonce account from to withdraw from @@ -1661,12 +1712,15 @@ FLAGS: -v, --verbose Show extra information header OPTIONS: - --ask-seed-phrase Securely recover a keypair using a seed phrase and optional passphrase - [possible values: keypair] - -C, --config Configuration file to use [default: - ~/.config/solana/cli/config.yml] - -u, --url JSON RPC URL for the solana cluster - -k, --keypair /path/to/id.json + --ask-seed-phrase + Recover a keypair using a seed phrase and optional passphrase [possible values: keypair] + + -C, --config + Configuration file to use [default: ~/.config/solana/cli/config.yml] + + -u, --url JSON RPC URL for the solana cluster + -k, --keypair /path/to/id.json + --withdraw-authority Public key of authorized withdrawer (defaults to cli config pubkey) ARGS: Stake account from which to withdraw diff --git a/cli/src/cli.rs b/cli/src/cli.rs index 6d7c26c222..437480b50f 100644 --- a/cli/src/cli.rs +++ b/cli/src/cli.rs @@ -1,7 +1,7 @@ use crate::{ cluster_query::*, display::{println_name_value, println_signers}, - nonce::*, + nonce::{self, *}, stake::*, storage::*, validator_info::*, @@ -146,6 +146,10 @@ impl PartialEq for SigningAuthority { } } +pub fn nonce_authority_arg<'a, 'b>() -> Arg<'a, 'b> { + nonce::nonce_authority_arg().requires(NONCE_ARG.name) +} + #[derive(Default, Debug, PartialEq)] pub struct PayCommand { pub lamports: u64, @@ -1969,23 +1973,8 @@ pub fn app<'ab, 'v>(name: &str, about: &'ab str, version: &'v str) -> App<'ab, ' .takes_value(false) .help("Sign the transaction offline"), ) - .arg( - Arg::with_name(NONCE_ARG.name) - .long(NONCE_ARG.long) - .takes_value(true) - .value_name("PUBKEY") - .requires("blockhash") - .validator(is_pubkey_or_keypair) - .help(NONCE_ARG.help), - ) - .arg( - Arg::with_name(NONCE_AUTHORITY_ARG.name) - .long(NONCE_AUTHORITY_ARG.long) - .takes_value(true) - .requires(NONCE_ARG.name) - .validator(is_pubkey_or_keypair_or_ask_keyword) - .help(NONCE_AUTHORITY_ARG.help), - ) + .arg(nonce_arg()) + .arg(nonce_authority_arg()) .arg( Arg::with_name("signer") .long("signer") diff --git a/cli/src/nonce.rs b/cli/src/nonce.rs index eb74ec4df9..4e4dce6d7f 100644 --- a/cli/src/nonce.rs +++ b/cli/src/nonce.rs @@ -49,13 +49,23 @@ pub trait NonceSubCommands { fn nonce_subcommands(self) -> Self; } -fn nonce_authority_arg<'a, 'b>() -> Arg<'a, 'b> { - Arg::with_name("nonce_authority") - .long("nonce-authority") +pub fn nonce_arg<'a, 'b>() -> Arg<'a, 'b> { + Arg::with_name(NONCE_ARG.name) + .long(NONCE_ARG.long) .takes_value(true) - .value_name("KEYPAIR") + .value_name("PUBKEY") + .requires("blockhash") + .validator(is_pubkey) + .help(NONCE_ARG.help) +} + +pub fn nonce_authority_arg<'a, 'b>() -> Arg<'a, 'b> { + Arg::with_name(NONCE_AUTHORITY_ARG.name) + .long(NONCE_AUTHORITY_ARG.long) + .takes_value(true) + .value_name("KEYPAIR or PUBKEY") .validator(is_pubkey_or_keypair_or_ask_keyword) - .help("Specify nonce authority if different from account") + .help(NONCE_AUTHORITY_ARG.help) } impl NonceSubCommands for App<'_, '_> { @@ -113,8 +123,8 @@ impl NonceSubCommands for App<'_, '_> { .help("Specify unit to use for request"), ) .arg( - Arg::with_name("nonce_authority") - .long("nonce-authority") + Arg::with_name(NONCE_AUTHORITY_ARG.name) + .long(NONCE_AUTHORITY_ARG.long) .takes_value(true) .value_name("BASE58_PUBKEY") .validator(is_pubkey_or_keypair) @@ -236,7 +246,7 @@ pub fn parse_authorize_nonce_account(matches: &ArgMatches<'_>) -> Result) -> Result { let nonce_account = keypair_of(matches, "nonce_account_keypair").unwrap(); let lamports = required_lamports_from(matches, "amount", "unit")?; - let nonce_authority = pubkey_of(matches, "nonce_authority"); + let nonce_authority = pubkey_of(matches, NONCE_AUTHORITY_ARG.name); Ok(CliCommandInfo { command: CliCommand::CreateNonceAccount { diff --git a/cli/src/stake.rs b/cli/src/stake.rs index ffe1ca9e15..a3163b7b0d 100644 --- a/cli/src/stake.rs +++ b/cli/src/stake.rs @@ -1,11 +1,11 @@ use crate::{ cli::{ build_balance_message, check_account_for_fee, check_unique_pubkeys, - get_blockhash_fee_calculator, log_instruction_custom_error, replace_signatures, - required_lamports_from, return_signers, CliCommand, CliCommandInfo, CliConfig, CliError, - ProcessResult, SigningAuthority, + get_blockhash_fee_calculator, log_instruction_custom_error, nonce_authority_arg, + replace_signatures, required_lamports_from, return_signers, CliCommand, CliCommandInfo, + CliConfig, CliError, ProcessResult, SigningAuthority, }, - nonce::{check_nonce_account, NONCE_ARG, NONCE_AUTHORITY_ARG}, + nonce::{check_nonce_account, nonce_arg, NONCE_ARG, NONCE_AUTHORITY_ARG}, }; use clap::{App, Arg, ArgMatches, SubCommand}; use console::style; @@ -48,7 +48,7 @@ fn stake_authority_arg<'a, 'b>() -> Arg<'a, 'b> { Arg::with_name(STAKE_AUTHORITY_ARG.name) .long(STAKE_AUTHORITY_ARG.long) .takes_value(true) - .value_name("KEYPAIR") + .value_name("KEYPAIR of PUBKEY") .validator(is_pubkey_or_keypair_or_ask_keyword) .help(STAKE_AUTHORITY_ARG.help) } @@ -57,7 +57,7 @@ fn withdraw_authority_arg<'a, 'b>() -> Arg<'a, 'b> { Arg::with_name(WITHDRAW_AUTHORITY_ARG.name) .long(WITHDRAW_AUTHORITY_ARG.long) .takes_value(true) - .value_name("KEYPAIR") + .value_name("KEYPAIR or PUBKEY") .validator(is_pubkey_or_keypair_or_ask_keyword) .help(WITHDRAW_AUTHORITY_ARG.help) } @@ -189,23 +189,8 @@ impl StakeSubCommands for App<'_, '_> { .validator(is_hash) .help("Use the supplied blockhash"), ) - .arg( - Arg::with_name(NONCE_ARG.name) - .long(NONCE_ARG.long) - .takes_value(true) - .value_name("PUBKEY") - .requires("blockhash") - .validator(is_pubkey) - .help(NONCE_ARG.help) - ) - .arg( - Arg::with_name(NONCE_AUTHORITY_ARG.name) - .long(NONCE_AUTHORITY_ARG.long) - .takes_value(true) - .requires(NONCE_ARG.name) - .validator(is_keypair_or_ask_keyword) - .help(NONCE_AUTHORITY_ARG.help) - ), + .arg(nonce_arg()) + .arg(nonce_authority_arg()) ) .subcommand( SubCommand::with_name("stake-authorize-staker") @@ -252,23 +237,8 @@ impl StakeSubCommands for App<'_, '_> { .validator(is_hash) .help("Use the supplied blockhash"), ) - .arg( - Arg::with_name(NONCE_ARG.name) - .long(NONCE_ARG.long) - .takes_value(true) - .value_name("PUBKEY") - .requires("blockhash") - .validator(is_pubkey) - .help(NONCE_ARG.help) - ) - .arg( - Arg::with_name(NONCE_AUTHORITY_ARG.name) - .long(NONCE_AUTHORITY_ARG.long) - .takes_value(true) - .requires(NONCE_ARG.name) - .validator(is_keypair_or_ask_keyword) - .help(NONCE_AUTHORITY_ARG.help) - ), + .arg(nonce_arg()) + .arg(nonce_authority_arg()) ) .subcommand( SubCommand::with_name("stake-authorize-withdrawer") @@ -315,23 +285,8 @@ impl StakeSubCommands for App<'_, '_> { .validator(is_hash) .help("Use the supplied blockhash"), ) - .arg( - Arg::with_name(NONCE_ARG.name) - .long(NONCE_ARG.long) - .takes_value(true) - .value_name("PUBKEY") - .requires("blockhash") - .validator(is_pubkey) - .help(NONCE_ARG.help) - ) - .arg( - Arg::with_name(NONCE_AUTHORITY_ARG.name) - .long(NONCE_AUTHORITY_ARG.long) - .takes_value(true) - .requires(NONCE_ARG.name) - .validator(is_keypair_or_ask_keyword) - .help(NONCE_AUTHORITY_ARG.help) - ), + .arg(nonce_arg()) + .arg(nonce_authority_arg()) ) .subcommand( SubCommand::with_name("deactivate-stake") @@ -368,23 +323,8 @@ impl StakeSubCommands for App<'_, '_> { .validator(is_hash) .help("Use the supplied blockhash"), ) - .arg( - Arg::with_name(NONCE_ARG.name) - .long(NONCE_ARG.long) - .takes_value(true) - .value_name("PUBKEY") - .requires("blockhash") - .validator(is_pubkey) - .help(NONCE_ARG.help) - ) - .arg( - Arg::with_name(NONCE_AUTHORITY_ARG.name) - .long(NONCE_AUTHORITY_ARG.long) - .takes_value(true) - .requires(NONCE_ARG.name) - .validator(is_keypair_or_ask_keyword) - .help(NONCE_AUTHORITY_ARG.help) - ), + .arg(nonce_arg()) + .arg(nonce_authority_arg()) ) .subcommand( SubCommand::with_name("withdraw-stake")