bankai_types/api/
stats.rs

1use crate::api::blocks::{EthereumConsensusSummaryDto, MmrRootsDto};
2use serde::{Deserialize, Serialize};
3use utoipa::ToSchema;
4
5#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
6pub struct BlockDetailStatsDto {
7    pub height: u64,
8    pub e2e_ms: Option<u64>,
9    pub updated_at: String,
10    pub ethereum: Option<EthereumConsensusSummaryDto>,
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub beacon_mmr: Option<ChainMmrInfoDto>,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub execution_mmr: Option<ChainMmrInfoDto>,
15}
16
17#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
18pub struct ChainOverviewDto {
19    pub network_id: u64,
20    pub name: String,
21    pub total_headers: u64,
22    pub first_header: u64,
23    pub current_header: u64,
24    pub latest_justified_height: u64,
25    pub latest_finalized_height: u64,
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
29pub struct LatestBlockOverviewDto {
30    pub height: u64,
31    pub e2e_ms: Option<u64>,
32    pub updated_at: String,
33    pub ethereum: Option<EthereumConsensusSummaryDto>,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
37pub struct OverviewStatsDto {
38    pub totals: TotalsDto,
39    pub chains: Vec<ChainOverviewDto>,
40    pub latest: PageDto<LatestBlockOverviewDto>,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
44pub struct TotalsDto {
45    pub total_blocks: u64,
46    pub total_proofs: u64,
47    #[serde(skip_serializing_if = "Option::is_none")]
48    pub avg_e2e_ms: Option<u64>,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
52#[schema(bound = "T: ToSchema")]
53pub struct PageDto<T> {
54    pub data: Vec<T>,
55    pub meta: PageMetaDto,
56}
57
58#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
59pub struct ChainMmrInfoDto {
60    pub keccak_root: String,
61    pub poseidon_root: String,
62    pub elements_count: u64,
63    pub leafs_count: u64,
64    pub keccak_peaks_count: u64,
65    pub poseidon_peaks_count: u64,
66    #[serde(skip_serializing_if = "Option::is_none")]
67    pub keccak_peaks: Option<Vec<String>>, // only when detail=true
68    #[serde(skip_serializing_if = "Option::is_none")]
69    pub poseidon_peaks: Option<Vec<String>>, // only when detail=true
70}
71
72#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
73pub struct ChainSnapshotSummaryDto {
74    pub chain_id: u64,
75    pub start_height: u64,
76    pub end_height: u64,
77    pub justified_height: u64,
78    pub finalized_height: u64,
79    pub mmr_roots: MmrRootsDto,
80}
81
82#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
83pub struct PageMetaDto {
84    pub cursor: Option<String>,
85    pub has_more: bool,
86}