rpc: more params for `GetVoteAccountsConfig`
This commit is contained in:
parent
8eda152d33
commit
bf90ea282a
|
@ -81,6 +81,8 @@ pub struct RpcGetVoteAccountsConfig {
|
||||||
pub vote_pubkey: Option<String>, // validator vote address, as a base-58 encoded string
|
pub vote_pubkey: Option<String>, // validator vote address, as a base-58 encoded string
|
||||||
#[serde(flatten)]
|
#[serde(flatten)]
|
||||||
pub commitment: Option<CommitmentConfig>,
|
pub commitment: Option<CommitmentConfig>,
|
||||||
|
pub keep_unstaked_delinquents: Option<bool>,
|
||||||
|
pub delinquent_slot_distance: Option<u64>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
|
|
|
@ -3028,6 +3028,8 @@ Returns the account info and associated stake for all the voting accounts in the
|
||||||
- `<object>` - (optional) Configuration object containing the following field:
|
- `<object>` - (optional) Configuration object containing the following field:
|
||||||
- (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment)
|
- (optional) [Commitment](jsonrpc-api.md#configuring-state-commitment)
|
||||||
- (optional) `votePubkey: <string>` - Only return results for this validator vote address (base-58 encoded)
|
- (optional) `votePubkey: <string>` - Only return results for this validator vote address (base-58 encoded)
|
||||||
|
- (optional) `keepUnstakedDelinquents: <bool>` - Do not filter out delinquent validators with no stake
|
||||||
|
- (optional) `delinquentSlotDistance: <u64>` - 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:
|
#### Results:
|
||||||
|
|
||||||
|
|
|
@ -794,6 +794,9 @@ impl JsonRpcRequestProcessor {
|
||||||
.epoch_vote_accounts(bank.get_epoch_and_slot_index(bank.slot()).0)
|
.epoch_vote_accounts(bank.get_epoch_and_slot_index(bank.slot()).0)
|
||||||
.ok_or_else(Error::invalid_request)?;
|
.ok_or_else(Error::invalid_request)?;
|
||||||
let default_vote_state = VoteState::default();
|
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): (
|
let (current_vote_accounts, delinquent_vote_accounts): (
|
||||||
Vec<RpcVoteAccountInfo>,
|
Vec<RpcVoteAccountInfo>,
|
||||||
Vec<RpcVoteAccountInfo>,
|
Vec<RpcVoteAccountInfo>,
|
||||||
|
@ -837,22 +840,27 @@ impl JsonRpcRequestProcessor {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.partition(|vote_account_info| {
|
.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
|
vote_account_info.last_vote
|
||||||
> bank.slot() - DELINQUENT_VALIDATOR_SLOT_DISTANCE as u64
|
> bank.slot() - delinquent_validator_slot_distance as u64
|
||||||
} else {
|
} else {
|
||||||
vote_account_info.last_vote > 0
|
vote_account_info.last_vote > 0
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
let delinquent_staked_vote_accounts = delinquent_vote_accounts
|
let keep_unstaked_delinquents = config.keep_unstaked_delinquents.unwrap_or_default();
|
||||||
|
let delinquent_vote_accounts = if !keep_unstaked_delinquents {
|
||||||
|
delinquent_vote_accounts
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter(|vote_account_info| vote_account_info.activated_stake > 0)
|
.filter(|vote_account_info| vote_account_info.activated_stake > 0)
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>()
|
||||||
|
} else {
|
||||||
|
delinquent_vote_accounts
|
||||||
|
};
|
||||||
|
|
||||||
Ok(RpcVoteAccountStatus {
|
Ok(RpcVoteAccountStatus {
|
||||||
current: current_vote_accounts,
|
current: current_vote_accounts,
|
||||||
delinquent: delinquent_staked_vote_accounts,
|
delinquent: delinquent_vote_accounts,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6621,7 +6629,8 @@ pub mod tests {
|
||||||
r#"{{"jsonrpc":"2.0","id":1,"method":"getVoteAccounts","params":{}}}"#,
|
r#"{{"jsonrpc":"2.0","id":1,"method":"getVoteAccounts","params":{}}}"#,
|
||||||
json!([RpcGetVoteAccountsConfig {
|
json!([RpcGetVoteAccountsConfig {
|
||||||
vote_pubkey: Some(leader_vote_keypair.pubkey().to_string()),
|
vote_pubkey: Some(leader_vote_keypair.pubkey().to_string()),
|
||||||
commitment: Some(CommitmentConfig::processed())
|
commitment: Some(CommitmentConfig::processed()),
|
||||||
|
..RpcGetVoteAccountsConfig::default()
|
||||||
}])
|
}])
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue