Add inflation subcommand
This commit is contained in:
parent
14036ac580
commit
42aeead6b4
|
@ -1,6 +1,6 @@
|
||||||
use crate::{
|
use crate::{
|
||||||
checks::*, cluster_query::*, feature::*, nonce::*, spend_utils::*, stake::*, validator_info::*,
|
checks::*, cluster_query::*, feature::*, inflation::*, nonce::*, spend_utils::*, stake::*,
|
||||||
vote::*,
|
validator_info::*, vote::*,
|
||||||
};
|
};
|
||||||
use clap::{value_t_or_exit, App, AppSettings, Arg, ArgMatches, SubCommand};
|
use clap::{value_t_or_exit, App, AppSettings, Arg, ArgMatches, SubCommand};
|
||||||
use log::*;
|
use log::*;
|
||||||
|
@ -93,6 +93,7 @@ pub enum CliCommand {
|
||||||
program_id: Pubkey,
|
program_id: Pubkey,
|
||||||
},
|
},
|
||||||
Feature(FeatureCliCommand),
|
Feature(FeatureCliCommand),
|
||||||
|
Inflation(InflationCliCommand),
|
||||||
Fees,
|
Fees,
|
||||||
FirstAvailableBlock,
|
FirstAvailableBlock,
|
||||||
GetBlock {
|
GetBlock {
|
||||||
|
@ -557,6 +558,9 @@ pub fn parse_command(
|
||||||
("epoch", Some(matches)) => parse_get_epoch(matches),
|
("epoch", Some(matches)) => parse_get_epoch(matches),
|
||||||
("slot", Some(matches)) => parse_get_slot(matches),
|
("slot", Some(matches)) => parse_get_slot(matches),
|
||||||
("block-height", Some(matches)) => parse_get_block_height(matches),
|
("block-height", Some(matches)) => parse_get_block_height(matches),
|
||||||
|
("inflation", Some(matches)) => {
|
||||||
|
parse_inflation_subcommand(matches, default_signer, wallet_manager)
|
||||||
|
}
|
||||||
("largest-accounts", Some(matches)) => parse_largest_accounts(matches),
|
("largest-accounts", Some(matches)) => parse_largest_accounts(matches),
|
||||||
("supply", Some(matches)) => parse_supply(matches),
|
("supply", Some(matches)) => parse_supply(matches),
|
||||||
("total-supply", Some(matches)) => parse_total_supply(matches),
|
("total-supply", Some(matches)) => parse_total_supply(matches),
|
||||||
|
@ -1365,6 +1369,9 @@ pub fn process_command(config: &CliConfig) -> ProcessResult {
|
||||||
process_largest_accounts(&rpc_client, config, filter.clone())
|
process_largest_accounts(&rpc_client, config, filter.clone())
|
||||||
}
|
}
|
||||||
CliCommand::GetTransactionCount => process_get_transaction_count(&rpc_client, config),
|
CliCommand::GetTransactionCount => process_get_transaction_count(&rpc_client, config),
|
||||||
|
CliCommand::Inflation(inflation_subcommand) => {
|
||||||
|
process_inflation_subcommand(&rpc_client, config, inflation_subcommand)
|
||||||
|
}
|
||||||
CliCommand::LeaderSchedule => process_leader_schedule(&rpc_client),
|
CliCommand::LeaderSchedule => process_leader_schedule(&rpc_client),
|
||||||
CliCommand::LiveSlots => process_live_slots(&config.websocket_url),
|
CliCommand::LiveSlots => process_live_slots(&config.websocket_url),
|
||||||
CliCommand::Ping {
|
CliCommand::Ping {
|
||||||
|
@ -1968,6 +1975,7 @@ pub fn app<'ab, 'v>(name: &str, about: &'ab str, version: &'v str) -> App<'ab, '
|
||||||
)
|
)
|
||||||
.cluster_query_subcommands()
|
.cluster_query_subcommands()
|
||||||
.feature_subcommands()
|
.feature_subcommands()
|
||||||
|
.inflation_subcommands()
|
||||||
.nonce_subcommands()
|
.nonce_subcommands()
|
||||||
.stake_subcommands()
|
.stake_subcommands()
|
||||||
.subcommand(
|
.subcommand(
|
||||||
|
|
|
@ -19,7 +19,6 @@ use solana_sdk::{
|
||||||
use std::{collections::HashMap, fmt, sync::Arc};
|
use std::{collections::HashMap, fmt, sync::Arc};
|
||||||
|
|
||||||
#[derive(Debug, PartialEq)]
|
#[derive(Debug, PartialEq)]
|
||||||
#[allow(clippy::large_enum_variant)]
|
|
||||||
pub enum FeatureCliCommand {
|
pub enum FeatureCliCommand {
|
||||||
Status { features: Vec<Pubkey> },
|
Status { features: Vec<Pubkey> },
|
||||||
Activate { feature: Pubkey },
|
Activate { feature: Pubkey },
|
||||||
|
@ -242,7 +241,7 @@ fn feature_activation_allowed(rpc_client: &RpcClient) -> Result<bool, ClientErro
|
||||||
.unwrap_or(false);
|
.unwrap_or(false);
|
||||||
|
|
||||||
if !feature_activation_allowed {
|
if !feature_activation_allowed {
|
||||||
println!("\n{}", style("Stake By Feature Id:").bold());
|
println!("\n{}", style("Stake By Feature Set:").bold());
|
||||||
for (feature_set, percentage) in active_stake_by_feature_set.iter() {
|
for (feature_set, percentage) in active_stake_by_feature_set.iter() {
|
||||||
if *feature_set == 0 {
|
if *feature_set == 0 {
|
||||||
println!("unknown - {}%", percentage);
|
println!("unknown - {}%", percentage);
|
||||||
|
@ -252,7 +251,7 @@ fn feature_activation_allowed(rpc_client: &RpcClient) -> Result<bool, ClientErro
|
||||||
feature_set,
|
feature_set,
|
||||||
percentage,
|
percentage,
|
||||||
if *feature_set == my_feature_set {
|
if *feature_set == my_feature_set {
|
||||||
" <-- current"
|
" <-- me"
|
||||||
} else {
|
} else {
|
||||||
""
|
""
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,89 @@
|
||||||
|
use crate::cli::{CliCommand, CliCommandInfo, CliConfig, CliError, ProcessResult};
|
||||||
|
use clap::{App, ArgMatches, SubCommand};
|
||||||
|
use console::style;
|
||||||
|
use solana_clap_utils::keypair::*;
|
||||||
|
use solana_client::rpc_client::RpcClient;
|
||||||
|
use solana_remote_wallet::remote_wallet::RemoteWalletManager;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq)]
|
||||||
|
pub enum InflationCliCommand {
|
||||||
|
Show,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait InflationSubCommands {
|
||||||
|
fn inflation_subcommands(self) -> Self;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl InflationSubCommands for App<'_, '_> {
|
||||||
|
fn inflation_subcommands(self) -> Self {
|
||||||
|
self.subcommand(SubCommand::with_name("inflation").about("Show inflation information"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn parse_inflation_subcommand(
|
||||||
|
_matches: &ArgMatches<'_>,
|
||||||
|
_default_signer: &DefaultSigner,
|
||||||
|
_wallet_manager: &mut Option<Arc<RemoteWalletManager>>,
|
||||||
|
) -> Result<CliCommandInfo, CliError> {
|
||||||
|
Ok(CliCommandInfo {
|
||||||
|
command: CliCommand::Inflation(InflationCliCommand::Show),
|
||||||
|
signers: vec![],
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn process_inflation_subcommand(
|
||||||
|
rpc_client: &RpcClient,
|
||||||
|
_config: &CliConfig,
|
||||||
|
inflation_subcommand: &InflationCliCommand,
|
||||||
|
) -> ProcessResult {
|
||||||
|
assert_eq!(*inflation_subcommand, InflationCliCommand::Show);
|
||||||
|
|
||||||
|
let governor = rpc_client.get_inflation_governor()?;
|
||||||
|
let current_inflation_rate = rpc_client.get_inflation_rate()?;
|
||||||
|
|
||||||
|
println!("{}", style("Inflation Governor:").bold());
|
||||||
|
if (governor.initial - governor.terminal).abs() < f64::EPSILON {
|
||||||
|
println!(
|
||||||
|
"Fixed APR: {:>5.2}%",
|
||||||
|
governor.terminal * 100.
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
println!("Initial APR: {:>5.2}%", governor.initial * 100.);
|
||||||
|
println!(
|
||||||
|
"Terminal APR: {:>5.2}%",
|
||||||
|
governor.terminal * 100.
|
||||||
|
);
|
||||||
|
println!("Rate reduction per year: {:>5.2}%", governor.taper * 100.);
|
||||||
|
}
|
||||||
|
if governor.foundation_term > 0. {
|
||||||
|
println!("Foundation percentage: {:>5.2}%", governor.foundation);
|
||||||
|
println!(
|
||||||
|
"Foundation term: {:.1} years",
|
||||||
|
governor.foundation_term
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
println!(
|
||||||
|
"\n{}",
|
||||||
|
style(format!(
|
||||||
|
"Inflation for Epoch {}:",
|
||||||
|
current_inflation_rate.epoch
|
||||||
|
))
|
||||||
|
.bold()
|
||||||
|
);
|
||||||
|
println!(
|
||||||
|
"Total APR: {:>5.2}%",
|
||||||
|
current_inflation_rate.total * 100.
|
||||||
|
);
|
||||||
|
println!(
|
||||||
|
"Staking APR: {:>5.2}%",
|
||||||
|
current_inflation_rate.validator * 100.
|
||||||
|
);
|
||||||
|
println!(
|
||||||
|
"Foundation APR: {:>5.2}%",
|
||||||
|
current_inflation_rate.foundation * 100.
|
||||||
|
);
|
||||||
|
|
||||||
|
Ok("".to_string())
|
||||||
|
}
|
|
@ -24,6 +24,7 @@ pub mod checks;
|
||||||
pub mod cli;
|
pub mod cli;
|
||||||
pub mod cluster_query;
|
pub mod cluster_query;
|
||||||
pub mod feature;
|
pub mod feature;
|
||||||
|
pub mod inflation;
|
||||||
pub mod nonce;
|
pub mod nonce;
|
||||||
pub mod spend_utils;
|
pub mod spend_utils;
|
||||||
pub mod stake;
|
pub mod stake;
|
||||||
|
|
Loading…
Reference in New Issue