-
Notifications
You must be signed in to change notification settings - Fork 786
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add API endpoint to count statuses of all validators (#3756)
## Issue Addressed #3724 ## Proposed Changes Adds an endpoint to quickly count the number of occurances of each status in the validator set. ## Usage ```bash curl -X GET "http://localhost:5052/lighthouse/ui/validator_count" -H "accept: application/json" | jq ``` ```json { "data": { "active_ongoing":479508, "active_exiting":0, "active_slashed":0, "pending_initialized":28, "pending_queued":0, "withdrawal_possible":933, "withdrawal_done":0, "exited_unslashed":0, "exited_slashed":3 } } ```
- Loading branch information
Showing
3 changed files
with
107 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
use beacon_chain::{BeaconChain, BeaconChainError, BeaconChainTypes}; | ||
use eth2::types::ValidatorStatus; | ||
use serde::{Deserialize, Serialize}; | ||
use std::sync::Arc; | ||
use warp_utils::reject::beacon_chain_error; | ||
|
||
#[derive(Debug, Default, PartialEq, Clone, Serialize, Deserialize)] | ||
pub struct ValidatorCountResponse { | ||
pub active_ongoing: u64, | ||
pub active_exiting: u64, | ||
pub active_slashed: u64, | ||
pub pending_initialized: u64, | ||
pub pending_queued: u64, | ||
pub withdrawal_possible: u64, | ||
pub withdrawal_done: u64, | ||
pub exited_unslashed: u64, | ||
pub exited_slashed: u64, | ||
} | ||
|
||
pub fn get_validator_count<T: BeaconChainTypes>( | ||
chain: Arc<BeaconChain<T>>, | ||
) -> Result<ValidatorCountResponse, warp::Rejection> { | ||
let spec = &chain.spec; | ||
let mut active_ongoing = 0; | ||
let mut active_exiting = 0; | ||
let mut active_slashed = 0; | ||
let mut pending_initialized = 0; | ||
let mut pending_queued = 0; | ||
let mut withdrawal_possible = 0; | ||
let mut withdrawal_done = 0; | ||
let mut exited_unslashed = 0; | ||
let mut exited_slashed = 0; | ||
|
||
chain | ||
.with_head(|head| { | ||
let state = &head.beacon_state; | ||
let epoch = state.current_epoch(); | ||
for validator in state.validators() { | ||
let status = | ||
ValidatorStatus::from_validator(validator, epoch, spec.far_future_epoch); | ||
|
||
match status { | ||
ValidatorStatus::ActiveOngoing => active_ongoing += 1, | ||
ValidatorStatus::ActiveExiting => active_exiting += 1, | ||
ValidatorStatus::ActiveSlashed => active_slashed += 1, | ||
ValidatorStatus::PendingInitialized => pending_initialized += 1, | ||
ValidatorStatus::PendingQueued => pending_queued += 1, | ||
ValidatorStatus::WithdrawalPossible => withdrawal_possible += 1, | ||
ValidatorStatus::WithdrawalDone => withdrawal_done += 1, | ||
ValidatorStatus::ExitedUnslashed => exited_unslashed += 1, | ||
ValidatorStatus::ExitedSlashed => exited_slashed += 1, | ||
// Since we are not invoking `superset`, all other variants will be 0. | ||
_ => (), | ||
} | ||
} | ||
Ok::<(), BeaconChainError>(()) | ||
}) | ||
.map_err(beacon_chain_error)?; | ||
|
||
Ok(ValidatorCountResponse { | ||
active_ongoing, | ||
active_exiting, | ||
active_slashed, | ||
pending_initialized, | ||
pending_queued, | ||
withdrawal_possible, | ||
withdrawal_done, | ||
exited_unslashed, | ||
exited_slashed, | ||
}) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters