use super::SnsPolicyObservationStatus;
use serde::{Deserialize, Serialize};
#[derive(Clone, Copy, Debug, Eq, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum SnsRewardAllocationStatus {
Valid,
NoAllocation,
Invalid,
}
impl SnsRewardAllocationStatus {
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::Valid => "valid",
Self::NoAllocation => "no_allocation",
Self::Invalid => "invalid",
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum SnsRewardDiffInvalidReasonKind {
BeforeCheckpointInvalid,
AfterCheckpointInvalid,
TargetMismatch,
CheckpointOrder,
PolicyNotObservedSatisfied,
RewardEventOrder,
RewardEventCoverage,
RewardEventContinuity,
NeuronMissingAfter,
NewNeuronCreationUnexplained,
NeuronCreationTimestampChanged,
NegativeMaturityDelta,
AggregateReconciliation,
PerNeuronReconciliation,
Arithmetic,
}
impl SnsRewardDiffInvalidReasonKind {
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::BeforeCheckpointInvalid => "before_checkpoint_invalid",
Self::AfterCheckpointInvalid => "after_checkpoint_invalid",
Self::TargetMismatch => "target_mismatch",
Self::CheckpointOrder => "checkpoint_order",
Self::PolicyNotObservedSatisfied => "policy_not_observed_satisfied",
Self::RewardEventOrder => "reward_event_order",
Self::RewardEventCoverage => "reward_event_coverage",
Self::RewardEventContinuity => "reward_event_continuity",
Self::NeuronMissingAfter => "neuron_missing_after",
Self::NewNeuronCreationUnexplained => "new_neuron_creation_unexplained",
Self::NeuronCreationTimestampChanged => "neuron_creation_timestamp_changed",
Self::NegativeMaturityDelta => "negative_maturity_delta",
Self::AggregateReconciliation => "aggregate_reconciliation",
Self::PerNeuronReconciliation => "per_neuron_reconciliation",
Self::Arithmetic => "arithmetic",
}
}
}
#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct SnsRewardDiffInvalidReason {
pub kind: SnsRewardDiffInvalidReasonKind,
pub neuron_id: Option<String>,
pub detail: String,
}
#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct SnsRewardDiffCheckpointRef {
pub network: String,
pub sns_wasm_canister_id: String,
pub id: usize,
pub name: String,
pub root_canister_id: String,
pub governance_canister_id: String,
pub ledger_canister_id: String,
pub swap_canister_id: String,
pub index_canister_id: String,
pub source_endpoint: String,
pub collection_completed_at_unix_secs: u64,
pub reward_event_end_timestamp_seconds: Option<u64>,
pub reward_event_actual_timestamp_seconds: u64,
pub reward_event_round: u64,
pub rounds_since_last_distribution: Option<u64>,
pub distributed_e8s_equivalent: u64,
}
#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct SnsRewardDiffRow {
pub neuron_id: String,
pub before_combined_maturity_e8s_equivalent: Option<u64>,
pub after_combined_maturity_e8s_equivalent: Option<u64>,
pub maturity_delta_e8s_equivalent: i128,
pub new_neuron: bool,
pub missing_after: bool,
pub before_created_timestamp_seconds: Option<u64>,
pub after_created_timestamp_seconds: Option<u64>,
pub before_maturity_mint_conversion_observed_disabled: Option<SnsPolicyObservationStatus>,
pub after_maturity_mint_conversion_observed_disabled: Option<SnsPolicyObservationStatus>,
pub before_manual_maturity_staking_observed_disabled: Option<SnsPolicyObservationStatus>,
pub after_manual_maturity_staking_observed_disabled: Option<SnsPolicyObservationStatus>,
pub before_pending_maturity_disbursement_count: Option<usize>,
pub after_pending_maturity_disbursement_count: Option<usize>,
pub policy_evidence_changed: bool,
pub allocation_numerator_e8s_equivalent: Option<u64>,
pub allocation_denominator_e8s_equivalent: Option<u64>,
}
#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub struct SnsRewardDiffReport {
pub schema_version: u32,
pub before: SnsRewardDiffCheckpointRef,
pub after: SnsRewardDiffCheckpointRef,
pub aggregate_before_combined_maturity_e8s_equivalent: Option<u64>,
pub aggregate_after_combined_maturity_e8s_equivalent: Option<u64>,
pub aggregate_maturity_delta_e8s_equivalent: Option<i128>,
pub summed_neuron_maturity_delta_e8s_equivalent: Option<i128>,
pub distributed_e8s_equivalent: u64,
pub aggregate_reconciled: bool,
pub per_neuron_reconciled: bool,
pub before_policy_status: Option<SnsPolicyObservationStatus>,
pub after_policy_status: Option<SnsPolicyObservationStatus>,
pub allocation_status: SnsRewardAllocationStatus,
pub invalid_reasons: Vec<SnsRewardDiffInvalidReason>,
pub rows: Vec<SnsRewardDiffRow>,
pub checkpoint_content_authenticated: bool,
}