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
174impl 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
201impl 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}