#[cfg(feature = "host")]
use candid::CandidType;
use serde::{Deserialize as SerdeDeserialize, Serialize};
#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
pub struct NnsGovernanceReportContext {
pub schema_version: u32,
pub network: String,
pub governance_canister_id: String,
pub fetched_at: String,
pub source_endpoint: String,
pub fetched_by: String,
}
#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
pub struct NnsGovernanceMetricBucket<Value> {
pub key: u64,
pub value: Value,
}
#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
pub struct NnsGovernanceEconomicsReport {
#[serde(flatten)]
pub context: NnsGovernanceReportContext,
pub economics: NnsGovernanceEconomics,
}
#[cfg_attr(feature = "host", derive(CandidType))]
#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
pub struct NnsGovernanceEconomics {
pub neuron_minimum_stake_e8s: u64,
pub max_proposals_to_keep_per_topic: u32,
pub neuron_management_fee_per_proposal_e8s: u64,
pub reject_cost_e8s: u64,
pub transaction_fee_e8s: u64,
pub neuron_spawn_dissolve_delay_seconds: u64,
pub minimum_icp_xdr_rate: u64,
pub maximum_node_provider_rewards_e8s: u64,
pub neurons_fund_economics: Option<NnsNeuronsFundEconomics>,
pub voting_power_economics: Option<NnsVotingPowerEconomics>,
}
#[cfg_attr(feature = "host", derive(CandidType))]
#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
pub struct NnsNeuronsFundEconomics {
pub maximum_icp_xdr_rate: Option<NnsGovernancePercentage>,
pub neurons_fund_matched_funding_curve_coefficients:
Option<NnsNeuronsFundMatchedFundingCurveCoefficients>,
pub max_theoretical_neurons_fund_participation_amount_xdr: Option<NnsGovernanceDecimal>,
pub minimum_icp_xdr_rate: Option<NnsGovernancePercentage>,
}
#[cfg_attr(feature = "host", derive(CandidType))]
#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
pub struct NnsNeuronsFundMatchedFundingCurveCoefficients {
pub contribution_threshold_xdr: Option<NnsGovernanceDecimal>,
pub one_third_participation_milestone_xdr: Option<NnsGovernanceDecimal>,
pub full_participation_milestone_xdr: Option<NnsGovernanceDecimal>,
}
#[cfg_attr(feature = "host", derive(CandidType))]
#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
pub struct NnsGovernancePercentage {
pub basis_points: Option<u64>,
}
#[cfg_attr(feature = "host", derive(CandidType))]
#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
pub struct NnsGovernanceDecimal {
pub human_readable: Option<String>,
}
#[cfg_attr(feature = "host", derive(CandidType))]
#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
pub struct NnsVotingPowerEconomics {
pub start_reducing_voting_power_after_seconds: Option<u64>,
pub clear_following_after_seconds: Option<u64>,
pub neuron_minimum_dissolve_delay_to_vote_seconds: Option<u64>,
}
#[derive(Clone, Debug, PartialEq, SerdeDeserialize, Serialize)]
pub struct NnsGovernanceMetricsReport {
#[serde(flatten)]
pub context: NnsGovernanceReportContext,
pub metrics: NnsGovernanceMetrics,
}
#[derive(Clone, Debug, PartialEq, SerdeDeserialize, Serialize)]
pub struct NnsGovernanceMetrics {
pub total_maturity_e8s_equivalent: u64,
pub not_dissolving_neurons_e8s_buckets: Vec<NnsGovernanceMetricBucket<f64>>,
pub dissolving_neurons_staked_maturity_e8s_equivalent_sum: u64,
pub garbage_collectable_neurons_count: u64,
pub dissolving_neurons_staked_maturity_e8s_equivalent_buckets:
Vec<NnsGovernanceMetricBucket<f64>>,
pub neurons_with_invalid_stake_count: u64,
pub not_dissolving_neurons_count_buckets: Vec<NnsGovernanceMetricBucket<u64>>,
pub ect_neuron_count: u64,
pub total_supply_icp: u64,
pub neurons_with_less_than_6_months_dissolve_delay_count: u64,
pub dissolved_neurons_count: u64,
pub community_fund_total_maturity_e8s_equivalent: u64,
pub total_staked_e8s_seed: u64,
pub total_staked_maturity_e8s_equivalent_ect: u64,
pub total_staked_e8s: u64,
pub not_dissolving_neurons_count: u64,
pub total_locked_e8s: u64,
pub neurons_fund_total_active_neurons: u64,
pub total_voting_power_non_self_authenticating_controller: Option<u64>,
pub total_staked_maturity_e8s_equivalent: u64,
pub not_dissolving_neurons_e8s_buckets_ect: Vec<NnsGovernanceMetricBucket<f64>>,
pub total_staked_e8s_ect: u64,
pub not_dissolving_neurons_staked_maturity_e8s_equivalent_sum: u64,
pub dissolved_neurons_e8s: u64,
pub total_staked_e8s_non_self_authenticating_controller: Option<u64>,
pub dissolving_neurons_e8s_buckets_seed: Vec<NnsGovernanceMetricBucket<f64>>,
pub neurons_with_less_than_6_months_dissolve_delay_e8s: u64,
pub not_dissolving_neurons_staked_maturity_e8s_equivalent_buckets:
Vec<NnsGovernanceMetricBucket<f64>>,
pub dissolving_neurons_count_buckets: Vec<NnsGovernanceMetricBucket<u64>>,
pub dissolving_neurons_e8s_buckets_ect: Vec<NnsGovernanceMetricBucket<f64>>,
pub dissolving_neurons_count: u64,
pub dissolving_neurons_e8s_buckets: Vec<NnsGovernanceMetricBucket<f64>>,
pub total_staked_maturity_e8s_equivalent_seed: u64,
pub community_fund_total_staked_e8s: u64,
pub not_dissolving_neurons_e8s_buckets_seed: Vec<NnsGovernanceMetricBucket<f64>>,
pub timestamp_seconds: u64,
pub seed_neuron_count: u64,
pub spawning_neurons_count: u64,
pub total_maturity_disbursements_in_progress_e8s_equivalent: u64,
pub non_self_authenticating_controller_neuron_subset_metrics:
Option<NnsGovernanceNeuronSubsetMetrics>,
pub public_neuron_subset_metrics: Option<NnsGovernanceNeuronSubsetMetrics>,
pub declining_voting_power_neuron_subset_metrics: Option<NnsGovernanceNeuronSubsetMetrics>,
pub fully_lost_voting_power_neuron_subset_metrics: Option<NnsGovernanceNeuronSubsetMetrics>,
}
#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
pub struct NnsGovernanceNeuronSubsetMetrics {
pub count: Option<u64>,
pub total_staked_e8s: Option<u64>,
pub total_maturity_e8s_equivalent: Option<u64>,
pub total_staked_maturity_e8s_equivalent: Option<u64>,
pub total_voting_power: Option<u64>,
pub total_deciding_voting_power: Option<u64>,
pub total_potential_voting_power: Option<u64>,
pub count_buckets: Vec<NnsGovernanceMetricBucket<u64>>,
pub staked_e8s_buckets: Vec<NnsGovernanceMetricBucket<u64>>,
pub maturity_e8s_equivalent_buckets: Vec<NnsGovernanceMetricBucket<u64>>,
pub staked_maturity_e8s_equivalent_buckets: Vec<NnsGovernanceMetricBucket<u64>>,
pub voting_power_buckets: Vec<NnsGovernanceMetricBucket<u64>>,
pub deciding_voting_power_buckets: Vec<NnsGovernanceMetricBucket<u64>>,
pub potential_voting_power_buckets: Vec<NnsGovernanceMetricBucket<u64>>,
}
#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
pub struct NnsGovernanceRewardEventReport {
#[serde(flatten)]
pub context: NnsGovernanceReportContext,
pub reward_event: NnsGovernanceRewardEvent,
}
#[cfg_attr(feature = "host", derive(CandidType))]
#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
pub struct NnsGovernanceRewardEvent {
pub rounds_since_last_distribution: Option<u64>,
pub day_after_genesis: u64,
pub actual_timestamp_seconds: u64,
pub total_available_e8s_equivalent: u64,
pub latest_round_available_e8s_equivalent: Option<u64>,
pub distributed_e8s_equivalent: u64,
pub settled_proposals: Vec<NnsGovernanceProposalId>,
}
#[cfg_attr(feature = "host", derive(CandidType))]
#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
pub struct NnsGovernanceProposalId {
pub id: u64,
}
#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
pub struct NnsGovernanceMaturityModulationReport {
#[serde(flatten)]
pub context: NnsGovernanceReportContext,
pub maturity_modulation: Option<NnsGovernanceMaturityModulation>,
}
#[cfg_attr(feature = "host", derive(CandidType))]
#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
pub struct NnsGovernanceMaturityModulation {
pub current_value_permyriad: Option<i32>,
pub updated_at_timestamp_seconds: Option<u64>,
}