Move CLI offline args to clap-utils
This commit is contained in:
committed by
Trent Nelson
parent
3fb8428636
commit
6cf74d1166
@ -1,4 +1,5 @@
|
|||||||
use crate::ArgConstant;
|
use crate::{input_validators::*, ArgConstant};
|
||||||
|
use clap::{App, Arg};
|
||||||
|
|
||||||
pub const BLOCKHASH_ARG: ArgConstant<'static> = ArgConstant {
|
pub const BLOCKHASH_ARG: ArgConstant<'static> = ArgConstant {
|
||||||
name: "blockhash",
|
name: "blockhash",
|
||||||
@ -17,3 +18,43 @@ pub const SIGNER_ARG: ArgConstant<'static> = ArgConstant {
|
|||||||
long: "signer",
|
long: "signer",
|
||||||
help: "Provide a public-key/signature pair for the transaction",
|
help: "Provide a public-key/signature pair for the transaction",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pub fn blockhash_arg<'a, 'b>() -> Arg<'a, 'b> {
|
||||||
|
Arg::with_name(BLOCKHASH_ARG.name)
|
||||||
|
.long(BLOCKHASH_ARG.long)
|
||||||
|
.takes_value(true)
|
||||||
|
.value_name("BLOCKHASH")
|
||||||
|
.validator(is_hash)
|
||||||
|
.help(BLOCKHASH_ARG.help)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn sign_only_arg<'a, 'b>() -> Arg<'a, 'b> {
|
||||||
|
Arg::with_name(SIGN_ONLY_ARG.name)
|
||||||
|
.long(SIGN_ONLY_ARG.long)
|
||||||
|
.takes_value(false)
|
||||||
|
.requires(BLOCKHASH_ARG.name)
|
||||||
|
.help(SIGN_ONLY_ARG.help)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn signer_arg<'a, 'b>() -> Arg<'a, 'b> {
|
||||||
|
Arg::with_name(SIGNER_ARG.name)
|
||||||
|
.long(SIGNER_ARG.long)
|
||||||
|
.takes_value(true)
|
||||||
|
.value_name("PUBKEY=SIGNATURE")
|
||||||
|
.validator(is_pubkey_sig)
|
||||||
|
.requires(BLOCKHASH_ARG.name)
|
||||||
|
.multiple(true)
|
||||||
|
.help(SIGNER_ARG.help)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait OfflineArgs {
|
||||||
|
fn offline_args(self) -> Self;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl OfflineArgs for App<'_, '_> {
|
||||||
|
fn offline_args(self) -> Self {
|
||||||
|
self.arg(blockhash_arg())
|
||||||
|
.arg(sign_only_arg())
|
||||||
|
.arg(signer_arg())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -4,7 +4,7 @@ use crate::{
|
|||||||
cluster_query::*,
|
cluster_query::*,
|
||||||
display::{new_spinner_progress_bar, println_name_value, println_transaction},
|
display::{new_spinner_progress_bar, println_name_value, println_transaction},
|
||||||
nonce::*,
|
nonce::*,
|
||||||
offline::{blockhash_query::BlockhashQuery, *},
|
offline::blockhash_query::BlockhashQuery,
|
||||||
spend_utils::*,
|
spend_utils::*,
|
||||||
stake::*,
|
stake::*,
|
||||||
validator_info::*,
|
validator_info::*,
|
||||||
@ -17,7 +17,7 @@ use serde_json::{self, json, Value};
|
|||||||
use solana_account_decoder::{UiAccount, UiAccountEncoding};
|
use solana_account_decoder::{UiAccount, UiAccountEncoding};
|
||||||
use solana_clap_utils::{
|
use solana_clap_utils::{
|
||||||
self, commitment::commitment_arg_with_default, input_parsers::*, input_validators::*,
|
self, commitment::commitment_arg_with_default, input_parsers::*, input_validators::*,
|
||||||
keypair::signer_from_path, nonce::*, offline::SIGN_ONLY_ARG, ArgConstant,
|
keypair::signer_from_path, nonce::*, offline::*, ArgConstant,
|
||||||
};
|
};
|
||||||
use solana_client::{
|
use solana_client::{
|
||||||
client_error::{ClientError, ClientErrorKind, Result as ClientResult},
|
client_error::{ClientError, ClientErrorKind, Result as ClientResult},
|
||||||
@ -2357,6 +2357,7 @@ pub fn app<'ab, 'v>(name: &str, about: &'ab str, version: &'v str) -> App<'ab, '
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
use crate::offline::*;
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
use solana_client::mock_sender::SIGNATURE;
|
use solana_client::mock_sender::SIGNATURE;
|
||||||
use solana_sdk::{
|
use solana_sdk::{
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
use super::*;
|
use super::*;
|
||||||
use solana_clap_utils::nonce::*;
|
use clap::ArgMatches;
|
||||||
|
use solana_clap_utils::{
|
||||||
|
input_parsers::{pubkey_of, value_of},
|
||||||
|
nonce::*,
|
||||||
|
offline::*,
|
||||||
|
};
|
||||||
use solana_client::nonce_utils;
|
use solana_client::nonce_utils;
|
||||||
use solana_sdk::commitment_config::CommitmentConfig;
|
use solana_sdk::commitment_config::CommitmentConfig;
|
||||||
|
|
||||||
@ -110,7 +115,7 @@ impl Default for BlockhashQuery {
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::offline::blockhash_query::BlockhashQuery;
|
use crate::offline::blockhash_query::{self, BlockhashQuery};
|
||||||
use clap::App;
|
use clap::App;
|
||||||
use serde_json::{self, json, Value};
|
use serde_json::{self, json, Value};
|
||||||
use solana_account_decoder::{UiAccount, UiAccountEncoding};
|
use solana_account_decoder::{UiAccount, UiAccountEncoding};
|
||||||
|
@ -1,13 +1,7 @@
|
|||||||
pub mod blockhash_query;
|
pub mod blockhash_query;
|
||||||
|
|
||||||
use clap::{App, Arg, ArgMatches};
|
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
use solana_clap_utils::{
|
use solana_clap_utils::keypair::presigner_from_pubkey_sigs;
|
||||||
input_parsers::{pubkey_of, value_of},
|
|
||||||
input_validators::{is_hash, is_pubkey_sig},
|
|
||||||
keypair::presigner_from_pubkey_sigs,
|
|
||||||
offline::{BLOCKHASH_ARG, SIGNER_ARG, SIGN_ONLY_ARG},
|
|
||||||
};
|
|
||||||
use solana_client::rpc_client::RpcClient;
|
use solana_client::rpc_client::RpcClient;
|
||||||
use solana_sdk::{
|
use solana_sdk::{
|
||||||
fee_calculator::FeeCalculator,
|
fee_calculator::FeeCalculator,
|
||||||
@ -17,46 +11,6 @@ use solana_sdk::{
|
|||||||
};
|
};
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
fn blockhash_arg<'a, 'b>() -> Arg<'a, 'b> {
|
|
||||||
Arg::with_name(BLOCKHASH_ARG.name)
|
|
||||||
.long(BLOCKHASH_ARG.long)
|
|
||||||
.takes_value(true)
|
|
||||||
.value_name("BLOCKHASH")
|
|
||||||
.validator(is_hash)
|
|
||||||
.help(BLOCKHASH_ARG.help)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn sign_only_arg<'a, 'b>() -> Arg<'a, 'b> {
|
|
||||||
Arg::with_name(SIGN_ONLY_ARG.name)
|
|
||||||
.long(SIGN_ONLY_ARG.long)
|
|
||||||
.takes_value(false)
|
|
||||||
.requires(BLOCKHASH_ARG.name)
|
|
||||||
.help(SIGN_ONLY_ARG.help)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn signer_arg<'a, 'b>() -> Arg<'a, 'b> {
|
|
||||||
Arg::with_name(SIGNER_ARG.name)
|
|
||||||
.long(SIGNER_ARG.long)
|
|
||||||
.takes_value(true)
|
|
||||||
.value_name("PUBKEY=SIGNATURE")
|
|
||||||
.validator(is_pubkey_sig)
|
|
||||||
.requires(BLOCKHASH_ARG.name)
|
|
||||||
.multiple(true)
|
|
||||||
.help(SIGNER_ARG.help)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub trait OfflineArgs {
|
|
||||||
fn offline_args(self) -> Self;
|
|
||||||
}
|
|
||||||
|
|
||||||
impl OfflineArgs for App<'_, '_> {
|
|
||||||
fn offline_args(self) -> Self {
|
|
||||||
self.arg(blockhash_arg())
|
|
||||||
.arg(sign_only_arg())
|
|
||||||
.arg(signer_arg())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct SignOnly {
|
pub struct SignOnly {
|
||||||
pub blockhash: Hash,
|
pub blockhash: Hash,
|
||||||
pub present_signers: Vec<(Pubkey, Signature)>,
|
pub present_signers: Vec<(Pubkey, Signature)>,
|
||||||
|
@ -6,7 +6,7 @@ use crate::{
|
|||||||
},
|
},
|
||||||
cli_output::{CliStakeHistory, CliStakeHistoryEntry, CliStakeState, CliStakeType},
|
cli_output::{CliStakeHistory, CliStakeHistoryEntry, CliStakeState, CliStakeType},
|
||||||
nonce::check_nonce_account,
|
nonce::check_nonce_account,
|
||||||
offline::{blockhash_query::BlockhashQuery, *},
|
offline::blockhash_query::BlockhashQuery,
|
||||||
spend_utils::{resolve_spend_tx_and_check_account_balances, SpendAmount},
|
spend_utils::{resolve_spend_tx_and_check_account_balances, SpendAmount},
|
||||||
};
|
};
|
||||||
use clap::{App, Arg, ArgGroup, ArgMatches, SubCommand};
|
use clap::{App, Arg, ArgGroup, ArgMatches, SubCommand};
|
||||||
@ -1762,7 +1762,10 @@ pub fn process_delegate_stake(
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::cli::{app, parse_command};
|
use crate::{
|
||||||
|
cli::{app, parse_command},
|
||||||
|
offline::blockhash_query,
|
||||||
|
};
|
||||||
use solana_sdk::{
|
use solana_sdk::{
|
||||||
hash::Hash,
|
hash::Hash,
|
||||||
signature::{
|
signature::{
|
||||||
|
Reference in New Issue
Block a user