1use crate::currency::{DecCoin, RegisteredCoins};
2use crate::deprecated::DelegationEvent;
3use crate::error::TypesError;
4use crate::mixnode::NodeCostParams;
5use cosmwasm_std::Decimal;
6use nym_mixnet_contract_common::{Delegation as MixnetContractDelegation, NodeId, NodeRewarding};
7use schemars::JsonSchema;
8use serde::{Deserialize, Serialize};
9
10#[cfg_attr(feature = "generate-ts", derive(ts_rs::TS))]
11#[cfg_attr(
12 feature = "generate-ts",
13 ts(export, export_to = "ts-packages/types/src/types/rust/Delegation.ts")
14)]
15#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, JsonSchema)]
16pub struct Delegation {
17 pub owner: String,
18 pub mix_id: NodeId,
19 pub amount: DecCoin,
20 pub height: u64,
21 pub proxy: Option<String>, }
23
24impl Delegation {
25 pub fn from_mixnet_contract(
26 delegation: MixnetContractDelegation,
27 reg: &RegisteredCoins,
28 ) -> Result<Self, TypesError> {
29 Ok(Delegation {
30 owner: delegation.owner.to_string(),
31 mix_id: delegation.node_id,
32 amount: reg.attempt_convert_to_display_dec_coin(delegation.amount.into())?,
33 height: delegation.height,
34 proxy: delegation.proxy.map(|d| d.to_string()),
35 })
36 }
37}
38
39#[cfg_attr(feature = "generate-ts", derive(ts_rs::TS))]
40#[cfg_attr(
41 feature = "generate-ts",
42 ts(
43 export,
44 export_to = "ts-packages/types/src/types/rust/DelegationWithEverything.ts"
45 )
46)]
47#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, JsonSchema)]
48pub struct DelegationWithEverything {
49 pub owner: String,
50 pub mix_id: NodeId,
51 pub node_identity: String,
52 pub amount: DecCoin,
53 pub accumulated_by_delegates: Option<DecCoin>,
54 pub accumulated_by_operator: Option<DecCoin>,
55 pub block_height: u64,
56 pub delegated_on_iso_datetime: Option<String>,
57 pub cost_params: Option<NodeCostParams>,
58 pub avg_uptime_percent: Option<u8>,
59
60 #[cfg_attr(feature = "generate-ts", ts(type = "string | null"))]
61 pub stake_saturation: Option<Decimal>,
62
63 pub uses_vesting_contract_tokens: bool,
64 pub unclaimed_rewards: Option<DecCoin>,
65
66 pub errors: Option<String>,
67
68 pub pending_events: Vec<DelegationEvent>,
70 pub mixnode_is_unbonding: Option<bool>,
71}
72
73pub struct NodeInformation {
74 pub owner: String,
75 pub mix_id: NodeId,
76 pub node_identity: String,
77 pub rewarding_details: NodeRewarding,
78 pub is_unbonding: bool,
79}
80
81#[cfg_attr(feature = "generate-ts", derive(ts_rs::TS))]
82#[cfg_attr(
83 feature = "generate-ts",
84 ts(
85 export,
86 export_to = "ts-packages/types/src/types/rust/DelegationResult.ts"
87 )
88)]
89#[derive(Serialize, Deserialize, JsonSchema, Clone, PartialEq, Eq, Debug)]
90pub struct DelegationResult {
91 source_address: String,
92 target_address: String,
93 amount: Option<DecCoin>,
94}
95
96#[cfg_attr(feature = "generate-ts", derive(ts_rs::TS))]
97#[cfg_attr(
98 feature = "generate-ts",
99 ts(
100 export,
101 export_to = "ts-packages/types/src/types/rust/DelegationSummaryResponse.ts"
102 )
103)]
104#[derive(Deserialize, Serialize)]
105pub struct DelegationsSummaryResponse {
106 pub delegations: Vec<DelegationWithEverything>,
107 pub total_delegations: DecCoin,
108 pub total_rewards: DecCoin,
109}