1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4pub struct DrepInfo {
5 pub drep_id: String,
6 pub hex: String,
7 pub has_script: bool,
8 pub registered: bool,
9 #[serde(skip_serializing_if = "Option::is_none")]
10 pub deposit: Option<String>,
11 pub active: bool,
12 #[serde(skip_serializing_if = "Option::is_none")]
13 pub expires_epoch_no: Option<u64>,
14 pub amount: String,
15 #[serde(skip_serializing_if = "Option::is_none")]
16 pub meta_url: Option<String>,
17 #[serde(skip_serializing_if = "Option::is_none")]
18 pub meta_hash: Option<String>,
19}
20
21#[derive(Debug, Clone, Serialize, Deserialize)]
22pub struct DrepEpochSummary {
23 pub epoch_no: u64,
24 pub amount: String,
25 pub dreps: u64,
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize)]
29pub struct DrepMetadata {
30 pub drep_id: String,
31 pub hex: String,
32 pub has_script: bool,
33 #[serde(skip_serializing_if = "Option::is_none")]
34 pub meta_url: Option<String>,
35 #[serde(skip_serializing_if = "Option::is_none")]
36 pub meta_hash: Option<String>,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 pub meta_json: Option<serde_json::Value>,
39 #[serde(skip_serializing_if = "Option::is_none")]
40 pub bytes: Option<String>,
41 #[serde(skip_serializing_if = "Option::is_none")]
42 pub warning: Option<String>,
43 #[serde(skip_serializing_if = "Option::is_none")]
44 pub language: Option<String>,
45 #[serde(skip_serializing_if = "Option::is_none")]
46 pub comment: Option<String>,
47 #[serde(skip_serializing_if = "Option::is_none")]
48 pub is_valid: Option<bool>,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
52pub struct DrepUpdate {
53 pub drep_id: String,
54 pub hex: String,
55 pub has_script: bool,
56 pub update_tx_hash: String,
57 pub cert_index: u64,
58 pub block_time: u64,
59 pub action: DrepAction,
60 #[serde(skip_serializing_if = "Option::is_none")]
61 pub deposit: Option<String>,
62 #[serde(skip_serializing_if = "Option::is_none")]
63 pub meta_url: Option<String>,
64 #[serde(skip_serializing_if = "Option::is_none")]
65 pub meta_hash: Option<String>,
66 #[serde(skip_serializing_if = "Option::is_none")]
67 pub meta_json: Option<serde_json::Value>,
68}
69
70#[derive(Debug, Clone, Serialize, Deserialize, Copy, PartialEq)]
71#[serde(rename_all = "lowercase")]
72pub enum DrepAction {
73 Updated,
74 Registered,
75 Deregistered,
76}
77
78#[derive(Debug, Clone, Serialize, Deserialize)]
79pub struct DrepVote {
80 pub proposal_id: String,
81 pub proposal_tx_hash: String,
82 pub proposal_index: u64,
83 pub vote_tx_hash: String,
84 pub block_time: u64,
85 pub vote: Vote,
86 #[serde(skip_serializing_if = "Option::is_none")]
87 pub meta_url: Option<String>,
88 #[serde(skip_serializing_if = "Option::is_none")]
89 pub meta_hash: Option<String>,
90}
91
92#[derive(Debug, Clone, Serialize, Deserialize, Copy, PartialEq)]
93#[serde(rename_all = "lowercase")]
94pub enum Vote {
95 Yes,
96 No,
97 Abstain,
98}
99
100#[derive(Debug, Clone, Serialize, Deserialize)]
101pub struct ProposalList {
102 pub block_time: u64,
103 pub proposal_id: String,
104 pub proposal_tx_hash: String,
105 pub proposal_index: u64,
106 pub proposal_type: ProposalType,
107 pub proposal_description: serde_json::Value,
108 pub deposit: String,
109 pub return_address: String,
110 pub proposed_epoch: u64,
111 #[serde(skip_serializing_if = "Option::is_none")]
112 pub ratified_epoch: Option<u64>,
113 #[serde(skip_serializing_if = "Option::is_none")]
114 pub enacted_epoch: Option<u64>,
115 #[serde(skip_serializing_if = "Option::is_none")]
116 pub dropped_epoch: Option<u64>,
117 #[serde(skip_serializing_if = "Option::is_none")]
118 pub expired_epoch: Option<u64>,
119 #[serde(skip_serializing_if = "Option::is_none")]
120 pub expiration: Option<u64>,
121 #[serde(skip_serializing_if = "Option::is_none")]
122 pub meta_url: Option<String>,
123 #[serde(skip_serializing_if = "Option::is_none")]
124 pub meta_hash: Option<String>,
125 #[serde(skip_serializing_if = "Option::is_none")]
126 pub meta_json: Option<serde_json::Value>,
127 #[serde(skip_serializing_if = "Option::is_none")]
128 pub meta_comment: Option<String>,
129 #[serde(skip_serializing_if = "Option::is_none")]
130 pub meta_language: Option<String>,
131 #[serde(skip_serializing_if = "Option::is_none")]
132 pub meta_is_valid: Option<bool>,
133 #[serde(skip_serializing_if = "Option::is_none")]
134 pub withdrawal: Option<ProposalWithdrawal>,
135 #[serde(skip_serializing_if = "Option::is_none")]
136 pub param_proposal: Option<serde_json::Value>,
137}
138
139#[derive(Debug, Clone, Serialize, Deserialize, Copy, PartialEq)]
140#[serde(rename_all = "snake_case")]
141pub enum ProposalType {
142 ParameterChange,
143 HardForkInitiation,
144 TreasuryWithdrawals,
145 NoConfidence,
146 NewCommittee,
147 NewConstitution,
148 InfoAction,
149}
150
151#[derive(Debug, Clone, Serialize, Deserialize)]
152pub struct ProposalWithdrawal {
153 pub stake_address: String,
154 pub amount: String,
155}
156
157#[derive(Debug, Clone, Serialize, Deserialize)]
158pub struct ProposalVote {
159 pub block_time: u64,
160 pub voter_role: VoterRole,
161 pub voter_id: String,
162 pub voter_hex: String,
163 pub voter_has_script: bool,
164 pub vote: Vote,
165 #[serde(skip_serializing_if = "Option::is_none")]
166 pub meta_url: Option<String>,
167 #[serde(skip_serializing_if = "Option::is_none")]
168 pub meta_hash: Option<String>,
169}
170
171#[derive(Debug, Clone, Serialize, Deserialize, Copy, PartialEq)]
172#[serde(rename_all = "snake_case")]
173pub enum VoterRole {
174 ConstitutionalCommittee,
175 DRep,
176 SPO,
177}
178
179#[derive(Debug, Clone, Serialize, Deserialize)]
181pub struct CommitteeInfo {
182 pub proposal_id: String,
183 pub proposal_tx_hash: String,
184 pub proposal_index: u64,
185 pub quorum_numerator: u64,
186 pub quorum_denominator: u64,
187 pub members: Vec<CommitteeMember>,
188}
189#[derive(Debug, Clone, Serialize, Deserialize)]
190pub struct CommitteeMember {
191 pub status: CommitteeMemberStatus,
192 pub cc_cold_hex: String,
193 pub cc_cold_has_script: bool,
194 #[serde(skip_serializing_if = "Option::is_none")]
195 pub cc_hot_hex: Option<String>,
196 #[serde(skip_serializing_if = "Option::is_none")]
197 pub cc_hot_has_script: Option<bool>,
198 pub expiration_epoch: u64,
199}
200
201#[derive(Debug, Clone, Serialize, Deserialize, Copy, PartialEq)]
202#[serde(rename_all = "snake_case")]
203pub enum CommitteeMemberStatus {
204 Authorized,
205 NotAuthorized,
206 Resigned,
207}
208
209impl DrepInfo {
211 pub fn new(
212 drep_id: String,
213 hex: String,
214 has_script: bool,
215 registered: bool,
216 active: bool,
217 amount: String,
218 ) -> Self {
219 Self {
220 drep_id,
221 hex,
222 has_script,
223 registered,
224 deposit: None,
225 active,
226 expires_epoch_no: None,
227 amount,
228 meta_url: None,
229 meta_hash: None,
230 }
231 }
232}
233
234impl ProposalList {
235 pub fn new(
236 block_time: u64,
237 proposal_id: String,
238 proposal_tx_hash: String,
239 proposal_index: u64,
240 proposal_type: ProposalType,
241 proposal_description: serde_json::Value,
242 deposit: String,
243 return_address: String,
244 proposed_epoch: u64,
245 ) -> Self {
246 Self {
247 block_time,
248 proposal_id,
249 proposal_tx_hash,
250 proposal_index,
251 proposal_type,
252 proposal_description,
253 deposit,
254 return_address,
255 proposed_epoch,
256 ratified_epoch: None,
257 enacted_epoch: None,
258 dropped_epoch: None,
259 expired_epoch: None,
260 expiration: None,
261 meta_url: None,
262 meta_hash: None,
263 meta_json: None,
264 meta_comment: None,
265 meta_language: None,
266 meta_is_valid: None,
267 withdrawal: None,
268 param_proposal: None,
269 }
270 }
271}
272
273#[derive(Debug, Clone, Serialize, Deserialize)]
274pub struct DrepHistory {
275 pub drep_id: String,
276 pub epoch_no: u64,
277 pub amount: String,
278}
279
280#[derive(Debug, Clone, Serialize, Deserialize)]
281pub struct CommitteeVotes {
282 pub proposal_id: String,
283 pub proposal_tx_hash: String,
284 pub proposal_index: u64,
285 pub vote_tx_hash: String,
286 pub block_time: u64,
287 pub vote: Vote,
288 #[serde(skip_serializing_if = "Option::is_none")]
289 pub meta_url: Option<String>,
290 #[serde(skip_serializing_if = "Option::is_none")]
291 pub meta_hash: Option<String>,
292}
293
294#[derive(Debug, Clone, Serialize, Deserialize)]
295pub struct VoterProposalList {
296 pub block_time: u64,
297 pub proposal_id: String,
298 pub proposal_tx_hash: String,
299 pub proposal_index: u64,
300 pub proposal_type: ProposalType,
301 pub proposal_description: serde_json::Value,
302 pub deposit: String,
303 pub return_address: String,
304 pub proposed_epoch: u64,
305 #[serde(skip_serializing_if = "Option::is_none")]
306 pub ratified_epoch: Option<u64>,
307 #[serde(skip_serializing_if = "Option::is_none")]
308 pub enacted_epoch: Option<u64>,
309 #[serde(skip_serializing_if = "Option::is_none")]
310 pub dropped_epoch: Option<u64>,
311 #[serde(skip_serializing_if = "Option::is_none")]
312 pub expired_epoch: Option<u64>,
313 #[serde(skip_serializing_if = "Option::is_none")]
314 pub expiration: Option<u64>,
315 #[serde(skip_serializing_if = "Option::is_none")]
316 pub meta_url: Option<String>,
317 #[serde(skip_serializing_if = "Option::is_none")]
318 pub meta_hash: Option<String>,
319 #[serde(skip_serializing_if = "Option::is_none")]
320 pub meta_json: Option<serde_json::Value>,
321 #[serde(skip_serializing_if = "Option::is_none")]
322 pub meta_comment: Option<String>,
323 #[serde(skip_serializing_if = "Option::is_none")]
324 pub meta_language: Option<String>,
325 #[serde(skip_serializing_if = "Option::is_none")]
326 pub meta_is_valid: Option<bool>,
327 #[serde(skip_serializing_if = "Option::is_none")]
328 pub withdrawal: Option<ProposalWithdrawal>,
329 #[serde(skip_serializing_if = "Option::is_none")]
330 pub param_proposal: Option<serde_json::Value>,
331}
332
333impl DrepHistory {
335 pub fn new(drep_id: String, epoch_no: u64, amount: String) -> Self {
336 Self {
337 drep_id,
338 epoch_no,
339 amount,
340 }
341 }
342}
343
344impl VoterProposalList {
345 pub fn new(
346 block_time: u64,
347 proposal_id: String,
348 proposal_tx_hash: String,
349 proposal_index: u64,
350 proposal_type: ProposalType,
351 proposal_description: serde_json::Value,
352 deposit: String,
353 return_address: String,
354 proposed_epoch: u64,
355 ) -> Self {
356 Self {
357 block_time,
358 proposal_id,
359 proposal_tx_hash,
360 proposal_index,
361 proposal_type,
362 proposal_description,
363 deposit,
364 return_address,
365 proposed_epoch,
366 ratified_epoch: None,
367 enacted_epoch: None,
368 dropped_epoch: None,
369 expired_epoch: None,
370 expiration: None,
371 meta_url: None,
372 meta_hash: None,
373 meta_json: None,
374 meta_comment: None,
375 meta_language: None,
376 meta_is_valid: None,
377 withdrawal: None,
378 param_proposal: None,
379 }
380 }
381}