koios_sdk/models/
asset.rs

1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct AssetInfo {
6    pub policy_id: String,
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub asset_name: Option<String>,
9    #[serde(skip_serializing_if = "Option::is_none")]
10    pub asset_name_ascii: Option<String>,
11    pub fingerprint: String,
12    pub minting_tx_hash: String,
13    pub total_supply: String,
14    pub mint_cnt: u64,
15    pub burn_cnt: u64,
16    pub creation_time: u64,
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub minting_tx_metadata: Option<serde_json::Value>,
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub token_registry_metadata: Option<TokenRegistryMetadata>,
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub cip68_metadata: Option<HashMap<String, serde_json::Value>>,
23}
24
25#[derive(Debug, Clone, Serialize, Deserialize)]
26pub struct TokenRegistryMetadata {
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub name: Option<String>,
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub description: Option<String>,
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub ticker: Option<String>,
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub url: Option<String>,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub logo: Option<String>,
37    pub decimals: u64,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct AssetAddress {
42    pub payment_address: String,
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub stake_address: Option<String>,
45    pub quantity: String,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
49pub struct AssetHistory {
50    pub policy_id: String,
51    pub asset_name: String,
52    pub fingerprint: String,
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub minting_txs: Option<Vec<MintingTransaction>>,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize)]
58pub struct MintingTransaction {
59    pub tx_hash: String,
60    pub block_time: u64,
61    pub quantity: String,
62    pub metadata: Vec<serde_json::Value>,
63}
64
65#[derive(Debug, Clone, Serialize, Deserialize)]
66pub struct AssetSummary {
67    pub policy_id: String,
68    pub asset_name: String,
69    pub fingerprint: String,
70    pub total_transactions: u64,
71    pub staked_wallets: u64,
72    pub unstaked_addresses: u64,
73    pub addresses: u64,
74    pub active_stake_pct: f64,
75}
76
77#[derive(Debug, Clone, Serialize, Deserialize)]
78pub struct PolicyAssetInfo {
79    pub asset_name: String,
80    pub asset_name_ascii: String,
81    pub fingerprint: String,
82    pub minting_tx_hash: String,
83    pub total_supply: String,
84    pub mint_cnt: u64,
85    pub burn_cnt: u64,
86    pub creation_time: u64,
87    #[serde(skip_serializing_if = "Option::is_none")]
88    pub minting_tx_metadata: Option<serde_json::Value>,
89    #[serde(skip_serializing_if = "Option::is_none")]
90    pub token_registry_metadata: Option<TokenRegistryMetadata>,
91}
92
93#[derive(Debug, Clone, Serialize, Deserialize)]
94pub struct PolicyAssetList {
95    pub asset_name: String,
96    pub fingerprint: String,
97    pub total_supply: String,
98    #[serde(skip_serializing_if = "Option::is_none")]
99    pub decimals: Option<u64>,
100}
101
102impl AssetInfo {
103    pub fn new(
104        policy_id: String,
105        fingerprint: String,
106        minting_tx_hash: String,
107        total_supply: String,
108        mint_cnt: u64,
109        burn_cnt: u64,
110        creation_time: u64,
111    ) -> Self {
112        Self {
113            policy_id,
114            asset_name: None,
115            asset_name_ascii: None,
116            fingerprint,
117            minting_tx_hash,
118            total_supply,
119            mint_cnt,
120            burn_cnt,
121            creation_time,
122            minting_tx_metadata: None,
123            token_registry_metadata: None,
124            cip68_metadata: None,
125        }
126    }
127}
128
129impl TokenRegistryMetadata {
130    pub fn new(decimals: u64) -> Self {
131        Self {
132            name: None,
133            description: None,
134            ticker: None,
135            url: None,
136            logo: None,
137            decimals,
138        }
139    }
140}
141
142#[derive(Debug, Clone, Serialize, Deserialize)]
143pub struct AssetList {
144    pub policy_id: String,
145    pub asset_name: String,
146    pub asset_name_ascii: String,
147    pub fingerprint: String,
148}
149
150#[derive(Debug, Clone, Serialize, Deserialize)]
151pub struct AssetAddresses {
152    pub payment_address: String,
153    #[serde(skip_serializing_if = "Option::is_none")]
154    pub stake_address: Option<String>,
155    pub quantity: String,
156}
157
158#[derive(Debug, Clone, Serialize, Deserialize)]
159pub struct PolicyAssetMint {
160    pub asset_name: String,
161    pub asset_name_ascii: String,
162    pub fingerprint: String,
163    pub minting_tx_hash: String,
164    pub total_supply: String,
165    pub mint_cnt: u64,
166    pub burn_cnt: u64,
167    pub creation_time: u64,
168    #[serde(skip_serializing_if = "Option::is_none")]
169    pub minting_tx_metadata: Option<serde_json::Value>,
170    #[serde(skip_serializing_if = "Option::is_none")]
171    pub decimals: Option<u64>,
172}
173
174// Implementation blocks
175impl PolicyAssetMint {
176    pub fn new(
177        asset_name: String,
178        asset_name_ascii: String,
179        fingerprint: String,
180        minting_tx_hash: String,
181        total_supply: String,
182        mint_cnt: u64,
183        burn_cnt: u64,
184        creation_time: u64,
185    ) -> Self {
186        Self {
187            asset_name,
188            asset_name_ascii,
189            fingerprint,
190            minting_tx_hash,
191            total_supply,
192            mint_cnt,
193            burn_cnt,
194            creation_time,
195            minting_tx_metadata: None,
196            decimals: None,
197        }
198    }
199}
200
201// Implementation blocks
202impl AssetTokenRegistry {
203    pub fn new(policy_id: String, asset_name: String, asset_name_ascii: String) -> Self {
204        Self {
205            policy_id,
206            asset_name,
207            asset_name_ascii,
208            ticker: None,
209            description: None,
210            url: None,
211            decimals: None,
212            logo: None,
213        }
214    }
215}
216
217#[derive(Debug, Clone, Serialize, Deserialize)]
218pub struct AssetTokenRegistry {
219    pub policy_id: String,
220    pub asset_name: String,
221    pub asset_name_ascii: String,
222    #[serde(skip_serializing_if = "Option::is_none")]
223    pub ticker: Option<String>,
224    #[serde(skip_serializing_if = "Option::is_none")]
225    pub description: Option<String>,
226    #[serde(skip_serializing_if = "Option::is_none")]
227    pub url: Option<String>,
228    #[serde(skip_serializing_if = "Option::is_none")]
229    pub decimals: Option<u64>,
230    #[serde(skip_serializing_if = "Option::is_none")]
231    pub logo: Option<String>,
232}
233
234#[derive(Debug, Clone, Serialize, Deserialize)]
235pub struct AssetNftAddress {
236    pub payment_address: String,
237    #[serde(skip_serializing_if = "Option::is_none")]
238    pub stake_address: Option<String>,
239}
240
241#[derive(Debug, Clone, Serialize, Deserialize)]
242pub struct PolicyAssetAddresses {
243    pub asset_name: String,
244    pub payment_address: String,
245    #[serde(skip_serializing_if = "Option::is_none")]
246    pub stake_address: Option<String>,
247    pub quantity: String,
248}