nym_types/
delegation.rs

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>, // proxy address used to delegate the funds on behalf of another address
22}
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    // DEPRECATED, IF POSSIBLE TRY TO DISCONTINUE USE OF IT!
69    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}