mirror of
https://github.com/sigp/lighthouse.git
synced 2026-04-18 21:38:31 +00:00
Add API to compute discrete validator attestation performance (#2874)
## Issue Addressed N/A ## Proposed Changes Add a HTTP API which can be used to compute the attestation performances of a validator (or all validators) over a discrete range of epochs. Performances can be computed for a single validator, or for the global validator set. ## Usage ### Request The API can be used as follows: ``` curl "http://localhost:5052/lighthouse/analysis/attestation_performance/{validator_index}?start_epoch=57730&end_epoch=57732" ``` Alternatively, to compute performances for the global validator set: ``` curl "http://localhost:5052/lighthouse/analysis/attestation_performance/global?start_epoch=57730&end_epoch=57732" ``` ### Response The response is JSON formatted as follows: ``` [ { "index": 72, "epochs": { "57730": { "active": true, "head": false, "target": false, "source": false }, "57731": { "active": true, "head": true, "target": true, "source": true, "delay": 1 }, "57732": { "active": true, "head": true, "target": true, "source": true, "delay": 1 }, } } ] ``` > Note that the `"epochs"` are not guaranteed to be in ascending order. ## Additional Info - This API is intended to be used in our upcoming validator analysis tooling (#2873) and will likely not be very useful for regular users. Some advanced users or block explorers may find this API useful however. - The request range is limited to 100 epochs (since the range is inclusive and it also computes the `end_epoch` it's actually 101 epochs) to prevent Lighthouse using exceptionally large amounts of memory.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
//! This module contains endpoints that are non-standard and only available on Lighthouse servers.
|
||||
|
||||
mod attestation_performance;
|
||||
mod block_rewards;
|
||||
|
||||
use crate::{
|
||||
@@ -14,6 +15,9 @@ use ssz::four_byte_option_impl;
|
||||
use ssz_derive::{Decode, Encode};
|
||||
use store::{AnchorInfo, Split};
|
||||
|
||||
pub use attestation_performance::{
|
||||
AttestationPerformance, AttestationPerformanceQuery, AttestationPerformanceStatistics,
|
||||
};
|
||||
pub use block_rewards::{AttestationRewards, BlockReward, BlockRewardMeta, BlockRewardsQuery};
|
||||
pub use lighthouse_network::{types::SyncState, PeerInfo};
|
||||
|
||||
|
||||
39
common/eth2/src/lighthouse/attestation_performance.rs
Normal file
39
common/eth2/src/lighthouse/attestation_performance.rs
Normal file
@@ -0,0 +1,39 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::collections::HashMap;
|
||||
use types::Epoch;
|
||||
|
||||
#[derive(Debug, Default, PartialEq, Clone, Serialize, Deserialize)]
|
||||
pub struct AttestationPerformanceStatistics {
|
||||
pub active: bool,
|
||||
pub head: bool,
|
||||
pub target: bool,
|
||||
pub source: bool,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub delay: Option<u64>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, PartialEq, Clone, Serialize, Deserialize)]
|
||||
pub struct AttestationPerformance {
|
||||
pub index: u64,
|
||||
pub epochs: HashMap<u64, AttestationPerformanceStatistics>,
|
||||
}
|
||||
|
||||
impl AttestationPerformance {
|
||||
pub fn initialize(indices: Vec<u64>) -> Vec<Self> {
|
||||
let mut vec = Vec::with_capacity(indices.len());
|
||||
for index in indices {
|
||||
vec.push(Self {
|
||||
index,
|
||||
..Default::default()
|
||||
})
|
||||
}
|
||||
vec
|
||||
}
|
||||
}
|
||||
|
||||
/// Query parameters for the `/lighthouse/analysis/attestation_performance` endpoint.
|
||||
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize)]
|
||||
pub struct AttestationPerformanceQuery {
|
||||
pub start_epoch: Epoch,
|
||||
pub end_epoch: Epoch,
|
||||
}
|
||||
Reference in New Issue
Block a user