use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Validator {
pub rank: Option<i64>,
pub identity: String,
pub vote_identity: String,
pub last_vote: Option<u64>,
pub root_slot: Option<u64>,
pub credits: Option<u64>,
pub epoch_credits: Option<u64>,
pub activated_stake: Option<f64>,
pub version: Option<String>,
pub delinquent: Option<bool>,
pub skip_rate: Option<f64>,
pub updated_at: Option<String>,
pub first_epoch_with_stake: Option<u64>,
pub name: Option<String>,
pub keybase: Option<String>,
pub description: Option<String>,
pub website: Option<String>,
pub commission: Option<u8>,
pub image: Option<String>,
pub ip_latitude: Option<String>,
pub ip_longitude: Option<String>,
pub ip_city: Option<String>,
pub ip_country: Option<String>,
pub ip_asn: Option<String>,
pub ip_org: Option<String>,
#[serde(rename = "mod")]
pub is_mod: Option<bool>,
pub is_jito: Option<bool>,
pub jito_commission_bps: Option<u64>,
pub vote_success: Option<f64>,
pub vote_success_score: Option<f64>,
pub skip_rate_score: Option<f64>,
pub info_score: Option<f64>,
pub commission_score: Option<f64>,
pub first_epoch_distance: Option<u64>,
pub epoch_distance_score: Option<f64>,
pub stake_weight: Option<f64>,
pub above_halt_line: Option<bool>,
pub stake_weight_score: Option<f64>,
pub withdraw_authority_score: Option<f64>,
pub asn: Option<String>,
pub asn_concentration: Option<f64>,
pub asn_concentration_score: Option<f64>,
pub uptime: Option<f64>,
pub uptime_score: Option<f64>,
pub wiz_score: Option<f64>,
pub version_valid: Option<bool>,
pub city_concentration: Option<f64>,
pub city_concentration_score: Option<f64>,
pub invalid_version_score: Option<f64>,
pub superminority_penalty: Option<f64>,
pub score_version: Option<u32>,
pub no_voting_override: Option<bool>,
pub epoch: Option<u64>,
pub epoch_slot_height: Option<u64>,
pub asncity_concentration: Option<f64>,
pub asncity_concentration_score: Option<f64>,
pub stake_ratio: Option<f64>,
pub credit_ratio: Option<f64>,
pub apy_estimate: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Delinquency {
pub delinquent_minutes: String,
pub date: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EpochStake {
pub epoch: u64,
pub stake: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StakeChanges {
pub activating_stake: Option<String>,
pub activating_count: Option<u64>,
pub deactivating_stake: Option<String>,
pub deactivating_count: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StakeChangesDetailed {
pub activating: Option<StakeDirection>,
pub deactivating: Option<StakeDirection>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StakeDirection {
pub amount: f64,
pub count: u64,
pub stake_accounts: Vec<StakeChangeAccount>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StakeChangeAccount {
pub pubkey: String,
pub delegated_amount: String,
pub activation_epoch: u64,
pub deactivation_epoch: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StakeAccount {
pub pubkey: String,
pub delegated_to: Option<String>,
pub balance: Option<u64>,
pub credits_observed: Option<u64>,
pub delegated_stake: Option<u64>,
pub activation_epoch: Option<u64>,
pub stake_authority: Option<String>,
pub withdraw_authority: Option<String>,
pub rent_exempt_reserve: Option<u64>,
pub active_stake: Option<u64>,
pub created_at: Option<String>,
pub updated_at: Option<String>,
pub deactivation_epoch: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HistoricWizScore {
pub wiz_score: String,
pub avg_wiz_score: String,
pub created_at: String,
pub score_version: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VoteSuccess {
pub vote_success: String,
pub created_at: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SkipRate {
pub skip_rate: String,
pub created_at: String,
}