CLI: Limit stake-history
output by default (#16672)
(cherry picked from commit f91de6a84d
)
Co-authored-by: Trent Nelson <trent@solana.com>
This commit is contained in:
@ -243,6 +243,7 @@ pub enum CliCommand {
|
||||
},
|
||||
ShowStakeHistory {
|
||||
use_lamports_unit: bool,
|
||||
limit_results: usize,
|
||||
},
|
||||
ShowStakeAccount {
|
||||
pubkey: Pubkey,
|
||||
@ -1582,9 +1583,10 @@ pub fn process_command(config: &CliConfig) -> ProcessResult {
|
||||
*use_lamports_unit,
|
||||
*with_rewards,
|
||||
),
|
||||
CliCommand::ShowStakeHistory { use_lamports_unit } => {
|
||||
process_show_stake_history(&rpc_client, config, *use_lamports_unit)
|
||||
}
|
||||
CliCommand::ShowStakeHistory {
|
||||
use_lamports_unit,
|
||||
limit_results,
|
||||
} => process_show_stake_history(&rpc_client, config, *use_lamports_unit, *limit_results),
|
||||
CliCommand::StakeAuthorize {
|
||||
stake_account_pubkey,
|
||||
ref new_authorizations,
|
||||
|
@ -19,7 +19,7 @@ use solana_clap_utils::{
|
||||
};
|
||||
use solana_cli_output::{
|
||||
return_signers_with_config, CliEpochReward, CliStakeHistory, CliStakeHistoryEntry,
|
||||
CliStakeState, CliStakeType, ReturnSignersConfig,
|
||||
CliStakeState, CliStakeType, OutputFormat, ReturnSignersConfig,
|
||||
};
|
||||
use solana_client::{
|
||||
blockhash_query::BlockhashQuery, nonce_utils, rpc_client::RpcClient,
|
||||
@ -436,6 +436,19 @@ impl StakeSubCommands for App<'_, '_> {
|
||||
.takes_value(false)
|
||||
.help("Display balance in lamports instead of SOL")
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("limit")
|
||||
.long("limit")
|
||||
.takes_value(true)
|
||||
.value_name("NUM")
|
||||
.default_value("10")
|
||||
.validator(|s| {
|
||||
s.parse::<usize>()
|
||||
.map(|_| ())
|
||||
.map_err(|e| e.to_string())
|
||||
})
|
||||
.help("Display NUM recent epochs worth of stake history in text mode. 0 for all")
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -878,8 +891,12 @@ pub fn parse_show_stake_account(
|
||||
|
||||
pub fn parse_show_stake_history(matches: &ArgMatches<'_>) -> Result<CliCommandInfo, CliError> {
|
||||
let use_lamports_unit = matches.is_present("lamports");
|
||||
let limit_results = value_of(matches, "limit").unwrap();
|
||||
Ok(CliCommandInfo {
|
||||
command: CliCommand::ShowStakeHistory { use_lamports_unit },
|
||||
command: CliCommand::ShowStakeHistory {
|
||||
use_lamports_unit,
|
||||
limit_results,
|
||||
},
|
||||
signers: vec![],
|
||||
})
|
||||
}
|
||||
@ -1812,14 +1829,25 @@ pub fn process_show_stake_history(
|
||||
rpc_client: &RpcClient,
|
||||
config: &CliConfig,
|
||||
use_lamports_unit: bool,
|
||||
limit_results: usize,
|
||||
) -> ProcessResult {
|
||||
let stake_history_account = rpc_client.get_account(&stake_history::id())?;
|
||||
let stake_history = from_account::<StakeHistory>(&stake_history_account).ok_or_else(|| {
|
||||
CliError::RpcRequestError("Failed to deserialize stake history".to_string())
|
||||
})?;
|
||||
|
||||
let limit_results = match config.output_format {
|
||||
OutputFormat::Json | OutputFormat::JsonCompact => std::usize::MAX,
|
||||
_ => {
|
||||
if limit_results == 0 {
|
||||
std::usize::MAX
|
||||
} else {
|
||||
limit_results
|
||||
}
|
||||
}
|
||||
};
|
||||
let mut entries: Vec<CliStakeHistoryEntry> = vec![];
|
||||
for entry in stake_history.deref() {
|
||||
for entry in stake_history.deref().iter().take(limit_results) {
|
||||
entries.push(entry.into());
|
||||
}
|
||||
let stake_history_output = CliStakeHistory {
|
||||
|
Reference in New Issue
Block a user