From 8f3ce5fc578da93405ccedf22150b9fae2bd83c7 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 16 Jul 2021 07:45:49 +0000 Subject: [PATCH] Cli configurable validators (backport #18630) (#18665) * rpc: more params for `GetVoteAccountsConfig` (cherry picked from commit bf90ea282ac7b442b669f97c2bb1e222a141f027) # Conflicts: # docs/src/developing/clients/jsonrpc-api.md * cli: allow returning more `solana validators` (cherry picked from commit a4a24b653110b1dac1d3d644a68a209e1d4080e4) # Conflicts: # Cargo.lock # cli/Cargo.toml # cli/src/cluster_query.rs Co-authored-by: Trent Nelson --- Cargo.lock | 117 ++++++++++++--------- cli/Cargo.toml | 1 + cli/src/cli.rs | 6 ++ cli/src/cluster_query.rs | 38 ++++++- cli/src/lib.rs | 3 + client/src/rpc_config.rs | 2 + core/src/rpc.rs | 25 +++-- docs/src/developing/clients/jsonrpc-api.md | 2 + 8 files changed, 134 insertions(+), 60 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 798f25edc2..ba111defa8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -140,7 +140,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3548b8efc9f8e8a5a0a2808c5bd8451a9031b9e5b879a79590304ae928b0a70" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -151,7 +151,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d3a45e77e34375a7923b1e8febb049bb011f064714a8e17a1a616fef01da13d" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -278,7 +278,7 @@ dependencies = [ "lazycell", "peeking_take_while", "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "regex", "rustc-hash", "shlex", @@ -406,7 +406,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d813fa25eb0bed78c36492cff4415f38c760d6de833d255ba9095bd8ebb7d725" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -417,7 +417,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e321a130a3ac4b88eb59a6d670bde11eec9721a397b77e0f2079060e2a1b785" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -428,7 +428,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcf78ee4a98c8cb9eba1bac3d3e2a1ea3d7673c719ce691e67b5cbafc472d3b7" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -439,7 +439,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15151a485164b319cc7a5160fe4316dc469a27993f71b73d7617dc9032ff0fd7" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -708,6 +708,26 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28b9d6de7f49e22cf97ad17fc4036ece69300032f45f78f30b4a4482cdc3f4a6" +[[package]] +name = "const_format" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c75ea7d6aeb2ebd1ee24f7b7e1b23242ef5a56b3a693733b99bfbe5ef31d0306" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c36c619c422113552db4eb28cddba8faa757e33f758cc3415bd2885977b591" +dependencies = [ + "proc-macro2 1.0.24", + "quote 1.0.9", + "unicode-xid 0.2.0", +] + [[package]] name = "constant_time_eq" version = "0.1.5" @@ -1005,7 +1025,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb582b60359da160a9477ee80f15c8d784c477e69c217ef2cdd4169c24ea380f" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -1016,7 +1036,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41cb0e6161ad61ed084a36ba71fbba9e3ac5aee3606fb607fe08da6acbcf3d8c" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -1172,7 +1192,7 @@ checksum = "7260c7e6e656fc7702a1aa8d5b498a1a69aa84ac4ffcd5501b7d26939f368a93" dependencies = [ "enum-ordinalize", "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -1213,7 +1233,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e94aa31f7c0dc764f57896dc615ddd76fc13b0d5dca7eb6cc5e018a5a09ec06" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -1226,7 +1246,7 @@ dependencies = [ "num-bigint", "num-traits", "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -1260,7 +1280,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", "synstructure", ] @@ -1448,7 +1468,7 @@ checksum = "77408a692f1f97bcc61dc001d752e00643408fbc922e4d634c655df50d595556" dependencies = [ "proc-macro-hack", "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -2140,7 +2160,7 @@ checksum = "34f6326966ebac440db89eba788f5a0e5ac2614b4b4bfbdc049a971e71040f32" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -2668,7 +2688,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f09b9841adb6b5e1f89ef7087ea636e0fd94b2851f887c1e3eb5d5f8228fab3" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -2719,7 +2739,7 @@ checksum = "1c0fd9eba1d5db0994a239e09c1be402d35622277e35468ba891aa5e3188ce7e" dependencies = [ "proc-macro-crate", "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -2809,7 +2829,7 @@ dependencies = [ "Inflector", "proc-macro-error", "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -2941,7 +2961,7 @@ checksum = "84f328a6a63192b333fce5fbb4be79db6758a4d518dfac6d54412f1492f72d32" dependencies = [ "proc-macro-hack", "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -3048,7 +3068,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c0e815c3ee9a031fdf5af21c10aa17c573c9c6a566328d99e3936c34e36461f" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -3059,7 +3079,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81a4ffa594b66bff340084d4081df649a7dc049ac8d7fc458d8e628bfbbb2f86" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -3148,7 +3168,7 @@ checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ "proc-macro-error-attr", "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", "version_check 0.9.2", ] @@ -3160,7 +3180,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "version_check 0.9.2", ] @@ -3231,7 +3251,7 @@ dependencies = [ "anyhow", "itertools 0.10.1", "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -3265,9 +3285,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54a21852a652ad6f610c9510194f398ff6f8692e334fd1145fed931f7fbe44ea" +checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" dependencies = [ "proc-macro2 1.0.24", ] @@ -3774,7 +3794,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e367622f934864ffa1c704ba2b82280aab856e3d8213c84c5720257eb34b15b9" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -3880,7 +3900,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8dee1f300f838c8ac340ecb0112b3ac472464fa67e87292bdb3dfc9c49128e17" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -3937,7 +3957,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d08338d8024b227c62bd68a12c7c9883f5c66780abaef15c550dc56f46ee6515" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -4362,6 +4382,7 @@ dependencies = [ "chrono", "clap", "console", + "const_format", "criterion-stats", "ctrlc", "dirs-next", @@ -4712,7 +4733,7 @@ version = "1.6.17" dependencies = [ "lazy_static", "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "rustc_version", "syn 1.0.60", ] @@ -4724,7 +4745,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2068bcc47160ac9081893439b10a05e4bbe85cc0f6bccb6f1b0815423fbdd0c" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "rustc_version", "syn 1.0.60", ] @@ -5376,7 +5397,7 @@ version = "1.6.17" dependencies = [ "bs58", "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "rustversion", "syn 1.0.60", ] @@ -5389,7 +5410,7 @@ checksum = "6473d8fa445520564c84e8803320721404d160ffd876a125326a726541f11534" dependencies = [ "bs58", "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "rustversion", "syn 1.0.60", ] @@ -5824,7 +5845,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "serde", "serde_derive", "syn 1.0.60", @@ -5838,7 +5859,7 @@ checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" dependencies = [ "base-x", "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "serde", "serde_derive", "serde_json", @@ -5894,7 +5915,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c700597eca8a5a762beb35753ef6b94df201c81cca676604f547495a0d7f0081" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "unicode-xid 0.2.0", ] @@ -5905,7 +5926,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", "unicode-xid 0.2.0", ] @@ -5978,7 +5999,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3240378a22b1195734e085ba71d1d4188d50f034aea82635acc430b7005afb5" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -6049,7 +6070,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9be73a2caec27583d0046ef3796c3794f868a5bc813db689eed00c7631275cd1" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -6111,7 +6132,7 @@ checksum = "e5c3be1edfad6027c69f5491cf4cb310d1a71ecd6af742788c6ff8bced86b8fa" dependencies = [ "proc-macro-hack", "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "standback", "syn 1.0.60", ] @@ -6303,7 +6324,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e44da00bfc73a25f814cd8d7e57a68a5c31b74b3152a0a1d1f590c97ed06265a" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -6314,7 +6335,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54473be61f4ebe4efd09cec9bd5d16fa51d70ea0192213d754d2d500457db110" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -6559,7 +6580,7 @@ checksum = "25db9a497663a9a779693ef67b6e6aef8345b3d3ff8d50ef92eae6c88cb1e386" dependencies = [ "proc-macro2 1.0.24", "prost-build", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -6614,7 +6635,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0693bf8d6f2bf22c690fc61a9d21ac69efdbb894a17ed596b9af0f01e64b84b" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", ] @@ -6929,7 +6950,7 @@ dependencies = [ "lazy_static", "log 0.4.11", "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", "wasm-bindgen-shared", ] @@ -6952,7 +6973,7 @@ version = "0.2.70" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b8853882eef39593ad4174dd26fc9865a64e84026d223f63bb2c42affcbba2c" dependencies = [ - "quote 1.0.6", + "quote 1.0.9", "wasm-bindgen-macro-support", ] @@ -6963,7 +6984,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4133b5e7f2a531fa413b3a1695e925038a05a71cf67e87dafa295cb645a01385" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", "wasm-bindgen-backend", "wasm-bindgen-shared", @@ -7151,7 +7172,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "de251eec69fc7c1bc3923403d18ececb929380e016afe103da75f396704f8ca2" dependencies = [ "proc-macro2 1.0.24", - "quote 1.0.6", + "quote 1.0.9", "syn 1.0.60", "synstructure", ] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index caafbfd678..071df21eea 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -17,6 +17,7 @@ clap = "2.33.1" criterion-stats = "0.3.0" ctrlc = { version = "3.1.5", features = ["termination"] } console = "0.11.3" +const_format = "0.2.14" dirs-next = "2.0.0" log = "0.4.11" Inflector = "0.11.4" diff --git a/cli/src/cli.rs b/cli/src/cli.rs index a4a81084f0..b11aa7975a 100644 --- a/cli/src/cli.rs +++ b/cli/src/cli.rs @@ -135,6 +135,8 @@ pub enum CliCommand { sort_order: CliValidatorsSortOrder, reverse_sort: bool, number_validators: bool, + keep_unstaked_delinquents: bool, + delinquent_slot_distance: Option, }, Supply { print_accounts: bool, @@ -1394,6 +1396,8 @@ pub fn process_command(config: &CliConfig) -> ProcessResult { sort_order, reverse_sort, number_validators, + keep_unstaked_delinquents, + delinquent_slot_distance, } => process_show_validators( &rpc_client, config, @@ -1401,6 +1405,8 @@ pub fn process_command(config: &CliConfig) -> ProcessResult { *sort_order, *reverse_sort, *number_validators, + *keep_unstaked_delinquents, + *delinquent_slot_distance, ), CliCommand::Supply { print_accounts } => { process_supply(&rpc_client, config, *print_accounts) diff --git a/cli/src/cluster_query.rs b/cli/src/cluster_query.rs index 5412f5bff6..a6f81a5c48 100644 --- a/cli/src/cluster_query.rs +++ b/cli/src/cluster_query.rs @@ -25,10 +25,11 @@ use solana_client::{ rpc_client::{GetConfirmedSignaturesForAddress2Config, RpcClient}, rpc_config::{ RpcAccountInfoConfig, RpcConfirmedBlockConfig, RpcConfirmedTransactionConfig, - RpcLargestAccountsConfig, RpcLargestAccountsFilter, RpcProgramAccountsConfig, - RpcTransactionLogsConfig, RpcTransactionLogsFilter, + RpcGetVoteAccountsConfig, RpcLargestAccountsConfig, RpcLargestAccountsFilter, + RpcProgramAccountsConfig, RpcTransactionLogsConfig, RpcTransactionLogsFilter, }, rpc_filter, + rpc_request::DELINQUENT_VALIDATOR_SLOT_DISTANCE, rpc_response::SlotInfo, }; use solana_remote_wallet::remote_wallet::RemoteWalletManager; @@ -175,7 +176,7 @@ impl ClusterQuerySubCommands for App<'_, '_> { .takes_value(true) .value_name("EPOCH") .validator(is_epoch) - .help("Epoch to show leader schedule for. (default: current)") + .help("Epoch to show leader schedule for. [default: current]") ) ) .subcommand( @@ -381,6 +382,25 @@ impl ClusterQuerySubCommands for App<'_, '_> { ]) .default_value("stake") .help("Sort order (does not affect JSON output)"), + ) + .arg( + Arg::with_name("keep_unstaked_delinquents") + .long("keep-unstaked-delinquents") + .takes_value(false) + .help("Don't discard unstaked, delinquent validators") + ) + .arg( + Arg::with_name("delinquent_slot_distance") + .long("delinquent-slot-distance") + .takes_value(true) + .value_name("SLOT_DISTANCE") + .validator(is_slot) + .help( + concatcp!( + "Minimum slot distance from the tip to consider a validator delinquent. [default: ", + DELINQUENT_VALIDATOR_SLOT_DISTANCE, + "]", + )) ), ) .subcommand( @@ -616,6 +636,8 @@ pub fn parse_show_validators(matches: &ArgMatches<'_>) -> Result CliValidatorsSortOrder::Delinquent, @@ -636,6 +658,8 @@ pub fn parse_show_validators(matches: &ArgMatches<'_>) -> Result, ) -> ProcessResult { let progress_bar = new_spinner_progress_bar(); progress_bar.set_message("Fetching vote accounts..."); let epoch_info = rpc_client.get_epoch_info()?; - let vote_accounts = rpc_client.get_vote_accounts()?; + let vote_accounts = rpc_client.get_vote_accounts_with_config(RpcGetVoteAccountsConfig { + keep_unstaked_delinquents: Some(keep_unstaked_delinquents), + delinquent_slot_distance, + ..RpcGetVoteAccountsConfig::default() + })?; progress_bar.set_message("Fetching block production..."); let skip_rate: HashMap<_, _> = rpc_client diff --git a/cli/src/lib.rs b/cli/src/lib.rs index 55d0b947f0..6473ee146d 100644 --- a/cli/src/lib.rs +++ b/cli/src/lib.rs @@ -19,6 +19,9 @@ macro_rules! pubkey { }; } +#[macro_use] +extern crate const_format; + extern crate serde_derive; pub mod checks; diff --git a/client/src/rpc_config.rs b/client/src/rpc_config.rs index 09caad53fc..2ab983379b 100644 --- a/client/src/rpc_config.rs +++ b/client/src/rpc_config.rs @@ -81,6 +81,8 @@ pub struct RpcGetVoteAccountsConfig { pub vote_pubkey: Option, // validator vote address, as a base-58 encoded string #[serde(flatten)] pub commitment: Option, + pub keep_unstaked_delinquents: Option, + pub delinquent_slot_distance: Option, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] diff --git a/core/src/rpc.rs b/core/src/rpc.rs index 9d7e3d61b6..edfb1d11ef 100644 --- a/core/src/rpc.rs +++ b/core/src/rpc.rs @@ -779,6 +779,9 @@ impl JsonRpcRequestProcessor { .epoch_vote_accounts(bank.get_epoch_and_slot_index(bank.slot()).0) .ok_or_else(Error::invalid_request)?; let default_vote_state = VoteState::default(); + let delinquent_validator_slot_distance = config + .delinquent_slot_distance + .unwrap_or(DELINQUENT_VALIDATOR_SLOT_DISTANCE); let (current_vote_accounts, delinquent_vote_accounts): ( Vec, Vec, @@ -822,22 +825,27 @@ impl JsonRpcRequestProcessor { }) }) .partition(|vote_account_info| { - if bank.slot() >= DELINQUENT_VALIDATOR_SLOT_DISTANCE as u64 { + if bank.slot() >= delinquent_validator_slot_distance as u64 { vote_account_info.last_vote - > bank.slot() - DELINQUENT_VALIDATOR_SLOT_DISTANCE as u64 + > bank.slot() - delinquent_validator_slot_distance as u64 } else { vote_account_info.last_vote > 0 } }); - let delinquent_staked_vote_accounts = delinquent_vote_accounts - .into_iter() - .filter(|vote_account_info| vote_account_info.activated_stake > 0) - .collect::>(); + let keep_unstaked_delinquents = config.keep_unstaked_delinquents.unwrap_or_default(); + let delinquent_vote_accounts = if !keep_unstaked_delinquents { + delinquent_vote_accounts + .into_iter() + .filter(|vote_account_info| vote_account_info.activated_stake > 0) + .collect::>() + } else { + delinquent_vote_accounts + }; Ok(RpcVoteAccountStatus { current: current_vote_accounts, - delinquent: delinquent_staked_vote_accounts, + delinquent: delinquent_vote_accounts, }) } @@ -6572,7 +6580,8 @@ pub mod tests { r#"{{"jsonrpc":"2.0","id":1,"method":"getVoteAccounts","params":{}}}"#, json!([RpcGetVoteAccountsConfig { vote_pubkey: Some(leader_vote_keypair.pubkey().to_string()), - commitment: Some(CommitmentConfig::processed()) + commitment: Some(CommitmentConfig::processed()), + ..RpcGetVoteAccountsConfig::default() }]) ); diff --git a/docs/src/developing/clients/jsonrpc-api.md b/docs/src/developing/clients/jsonrpc-api.md index f150192d28..193e2f0c31 100644 --- a/docs/src/developing/clients/jsonrpc-api.md +++ b/docs/src/developing/clients/jsonrpc-api.md @@ -3046,6 +3046,8 @@ Returns the account info and associated stake for all the voting accounts in the - `` - (optional) Configuration object containing the following field: - (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment) - (optional) `votePubkey: ` - Only return results for this validator vote address (base-58 encoded) + - (optional) `keepUnstakedDelinquents: ` - Do not filter out delinquent validators with no stake + - (optional) `delinquentSlotDistance: ` - Specify the number of slots behind the tip that a validator must fall to be considered delinquent. **NOTE:** For the sake of consistency between ecosystem products, _it is **not** recommended that this argument be specified._ #### Results: