1#[cfg(feature = "host")]
8use candid::CandidType;
9use serde::{Deserialize as SerdeDeserialize, Serialize};
10
11#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
18pub struct NnsGovernanceReportContext {
19 pub schema_version: u32,
21 pub network: String,
23 pub governance_canister_id: String,
25 pub fetched_at: String,
27 pub source_endpoint: String,
29 pub fetched_by: String,
31}
32
33#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
40pub struct NnsGovernanceMetricBucket<Value> {
41 pub key: u64,
43 pub value: Value,
45}
46
47#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
54pub struct NnsGovernanceEconomicsReport {
55 #[serde(flatten)]
57 pub context: NnsGovernanceReportContext,
58 pub economics: NnsGovernanceEconomics,
60}
61
62#[cfg_attr(feature = "host", derive(CandidType))]
69#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
70pub struct NnsGovernanceEconomics {
71 pub neuron_minimum_stake_e8s: u64,
73 pub max_proposals_to_keep_per_topic: u32,
75 pub neuron_management_fee_per_proposal_e8s: u64,
77 pub reject_cost_e8s: u64,
79 pub transaction_fee_e8s: u64,
81 pub neuron_spawn_dissolve_delay_seconds: u64,
83 pub minimum_icp_xdr_rate: u64,
85 pub maximum_node_provider_rewards_e8s: u64,
87 pub neurons_fund_economics: Option<NnsNeuronsFundEconomics>,
89 pub voting_power_economics: Option<NnsVotingPowerEconomics>,
91}
92
93#[cfg_attr(feature = "host", derive(CandidType))]
100#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
101pub struct NnsNeuronsFundEconomics {
102 pub maximum_icp_xdr_rate: Option<NnsGovernancePercentage>,
104 pub neurons_fund_matched_funding_curve_coefficients:
106 Option<NnsNeuronsFundMatchedFundingCurveCoefficients>,
107 pub max_theoretical_neurons_fund_participation_amount_xdr: Option<NnsGovernanceDecimal>,
109 pub minimum_icp_xdr_rate: Option<NnsGovernancePercentage>,
111}
112
113#[cfg_attr(feature = "host", derive(CandidType))]
120#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
121pub struct NnsNeuronsFundMatchedFundingCurveCoefficients {
122 pub contribution_threshold_xdr: Option<NnsGovernanceDecimal>,
124 pub one_third_participation_milestone_xdr: Option<NnsGovernanceDecimal>,
126 pub full_participation_milestone_xdr: Option<NnsGovernanceDecimal>,
128}
129
130#[cfg_attr(feature = "host", derive(CandidType))]
137#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
138pub struct NnsGovernancePercentage {
139 pub basis_points: Option<u64>,
141}
142
143#[cfg_attr(feature = "host", derive(CandidType))]
150#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
151pub struct NnsGovernanceDecimal {
152 pub human_readable: Option<String>,
154}
155
156#[cfg_attr(feature = "host", derive(CandidType))]
163#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
164pub struct NnsVotingPowerEconomics {
165 pub start_reducing_voting_power_after_seconds: Option<u64>,
167 pub clear_following_after_seconds: Option<u64>,
169 pub neuron_minimum_dissolve_delay_to_vote_seconds: Option<u64>,
171}
172
173#[derive(Clone, Debug, PartialEq, SerdeDeserialize, Serialize)]
180pub struct NnsGovernanceMetricsReport {
181 #[serde(flatten)]
183 pub context: NnsGovernanceReportContext,
184 pub metrics: NnsGovernanceMetrics,
186}
187
188#[derive(Clone, Debug, PartialEq, SerdeDeserialize, Serialize)]
195pub struct NnsGovernanceMetrics {
196 pub total_maturity_e8s_equivalent: u64,
198 pub not_dissolving_neurons_e8s_buckets: Vec<NnsGovernanceMetricBucket<f64>>,
200 pub dissolving_neurons_staked_maturity_e8s_equivalent_sum: u64,
202 pub garbage_collectable_neurons_count: u64,
204 pub dissolving_neurons_staked_maturity_e8s_equivalent_buckets:
206 Vec<NnsGovernanceMetricBucket<f64>>,
207 pub neurons_with_invalid_stake_count: u64,
209 pub not_dissolving_neurons_count_buckets: Vec<NnsGovernanceMetricBucket<u64>>,
211 pub ect_neuron_count: u64,
213 pub total_supply_icp: u64,
215 pub neurons_with_less_than_6_months_dissolve_delay_count: u64,
217 pub dissolved_neurons_count: u64,
219 pub community_fund_total_maturity_e8s_equivalent: u64,
221 pub total_staked_e8s_seed: u64,
223 pub total_staked_maturity_e8s_equivalent_ect: u64,
225 pub total_staked_e8s: u64,
227 pub not_dissolving_neurons_count: u64,
229 pub total_locked_e8s: u64,
231 pub neurons_fund_total_active_neurons: u64,
233 pub total_voting_power_non_self_authenticating_controller: Option<u64>,
235 pub total_staked_maturity_e8s_equivalent: u64,
237 pub not_dissolving_neurons_e8s_buckets_ect: Vec<NnsGovernanceMetricBucket<f64>>,
239 pub total_staked_e8s_ect: u64,
241 pub not_dissolving_neurons_staked_maturity_e8s_equivalent_sum: u64,
243 pub dissolved_neurons_e8s: u64,
245 pub total_staked_e8s_non_self_authenticating_controller: Option<u64>,
247 pub dissolving_neurons_e8s_buckets_seed: Vec<NnsGovernanceMetricBucket<f64>>,
249 pub neurons_with_less_than_6_months_dissolve_delay_e8s: u64,
251 pub not_dissolving_neurons_staked_maturity_e8s_equivalent_buckets:
253 Vec<NnsGovernanceMetricBucket<f64>>,
254 pub dissolving_neurons_count_buckets: Vec<NnsGovernanceMetricBucket<u64>>,
256 pub dissolving_neurons_e8s_buckets_ect: Vec<NnsGovernanceMetricBucket<f64>>,
258 pub dissolving_neurons_count: u64,
260 pub dissolving_neurons_e8s_buckets: Vec<NnsGovernanceMetricBucket<f64>>,
262 pub total_staked_maturity_e8s_equivalent_seed: u64,
264 pub community_fund_total_staked_e8s: u64,
266 pub not_dissolving_neurons_e8s_buckets_seed: Vec<NnsGovernanceMetricBucket<f64>>,
268 pub timestamp_seconds: u64,
270 pub seed_neuron_count: u64,
272 pub spawning_neurons_count: u64,
274 pub total_maturity_disbursements_in_progress_e8s_equivalent: u64,
276 pub non_self_authenticating_controller_neuron_subset_metrics:
278 Option<NnsGovernanceNeuronSubsetMetrics>,
279 pub public_neuron_subset_metrics: Option<NnsGovernanceNeuronSubsetMetrics>,
281 pub declining_voting_power_neuron_subset_metrics: Option<NnsGovernanceNeuronSubsetMetrics>,
283 pub fully_lost_voting_power_neuron_subset_metrics: Option<NnsGovernanceNeuronSubsetMetrics>,
285}
286
287#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
294pub struct NnsGovernanceNeuronSubsetMetrics {
295 pub count: Option<u64>,
297 pub total_staked_e8s: Option<u64>,
299 pub total_maturity_e8s_equivalent: Option<u64>,
301 pub total_staked_maturity_e8s_equivalent: Option<u64>,
303 pub total_voting_power: Option<u64>,
305 pub total_deciding_voting_power: Option<u64>,
307 pub total_potential_voting_power: Option<u64>,
309 pub count_buckets: Vec<NnsGovernanceMetricBucket<u64>>,
311 pub staked_e8s_buckets: Vec<NnsGovernanceMetricBucket<u64>>,
313 pub maturity_e8s_equivalent_buckets: Vec<NnsGovernanceMetricBucket<u64>>,
315 pub staked_maturity_e8s_equivalent_buckets: Vec<NnsGovernanceMetricBucket<u64>>,
317 pub voting_power_buckets: Vec<NnsGovernanceMetricBucket<u64>>,
319 pub deciding_voting_power_buckets: Vec<NnsGovernanceMetricBucket<u64>>,
321 pub potential_voting_power_buckets: Vec<NnsGovernanceMetricBucket<u64>>,
323}
324
325#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
332pub struct NnsGovernanceRewardEventReport {
333 #[serde(flatten)]
335 pub context: NnsGovernanceReportContext,
336 pub reward_event: NnsGovernanceRewardEvent,
338}
339
340#[cfg_attr(feature = "host", derive(CandidType))]
347#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
348pub struct NnsGovernanceRewardEvent {
349 pub rounds_since_last_distribution: Option<u64>,
351 pub day_after_genesis: u64,
353 pub actual_timestamp_seconds: u64,
355 pub total_available_e8s_equivalent: u64,
357 pub latest_round_available_e8s_equivalent: Option<u64>,
359 pub distributed_e8s_equivalent: u64,
361 pub settled_proposals: Vec<NnsGovernanceProposalId>,
363}
364
365#[cfg_attr(feature = "host", derive(CandidType))]
372#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
373pub struct NnsGovernanceProposalId {
374 pub id: u64,
376}
377
378#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
385pub struct NnsGovernanceMaturityModulationReport {
386 #[serde(flatten)]
388 pub context: NnsGovernanceReportContext,
389 pub maturity_modulation: Option<NnsGovernanceMaturityModulation>,
391}
392
393#[cfg_attr(feature = "host", derive(CandidType))]
400#[derive(Clone, Debug, Eq, PartialEq, SerdeDeserialize, Serialize)]
401pub struct NnsGovernanceMaturityModulation {
402 pub current_value_permyriad: Option<i32>,
404 pub updated_at_timestamp_seconds: Option<u64>,
406}