1use super::{
2 transaction::{Certificate, NativeScript, PlutusContract, ProposalProcedure, VotingProcedure},
3 AssetItem, PaymentAddress, TransactionOutput, Withdrawal,
4};
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct Block {
10 pub hash: String,
11 pub epoch_no: u64,
12 pub abs_slot: u64,
13 pub epoch_slot: u64,
14 #[serde(skip_serializing_if = "Option::is_none")]
15 pub block_height: Option<u64>,
16 pub block_size: u64,
17 pub block_time: u64,
18 pub tx_count: u64,
19 pub vrf_key: String,
20 #[serde(skip_serializing_if = "Option::is_none")]
21 pub pool: Option<String>,
22 pub op_cert_counter: u64,
23 pub proto_major: u64,
24 pub proto_minor: u64,
25 pub parent_hash: String,
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize)]
29pub struct BlockInfo {
30 pub hash: String,
31 pub epoch_no: u64,
32 pub abs_slot: u64,
33 pub epoch_slot: u64,
34 #[serde(skip_serializing_if = "Option::is_none")]
35 pub block_height: Option<u64>,
36 pub block_size: u64,
37 pub block_time: u64,
38 pub tx_count: u64,
39 pub vrf_key: String,
40 pub op_cert: String,
41 pub op_cert_counter: u64,
42 #[serde(skip_serializing_if = "Option::is_none")]
43 pub pool: Option<String>,
44 pub proto_major: u64,
45 pub proto_minor: u64,
46 #[serde(skip_serializing_if = "Option::is_none")]
47 pub total_output: Option<String>,
48 #[serde(skip_serializing_if = "Option::is_none")]
49 pub total_fees: Option<String>,
50 pub num_confirmations: u64,
51 pub parent_hash: String,
52 pub child_hash: String,
53}
54
55#[derive(Debug, Clone, Serialize, Deserialize)]
56pub struct BlockTransaction {
57 pub block_hash: String,
58 pub tx_hash: String,
59 pub epoch_no: u64,
60 pub block_height: u64,
61 pub block_time: u64,
62}
63
64#[derive(Debug, Clone, Serialize, Deserialize)]
65pub struct BlockTransactionCbor {
66 pub tx_hash: String,
67 pub block_hash: String,
68 pub block_height: u64,
69 pub epoch_no: u64,
70 pub absolute_slot: u64,
71 pub tx_timestamp: u64,
72 pub cbor: String,
73}
74
75impl Block {
76 pub fn new(
77 hash: String,
78 epoch_no: u64,
79 abs_slot: u64,
80 epoch_slot: u64,
81 block_height: Option<u64>,
82 block_size: u64,
83 block_time: u64,
84 tx_count: u64,
85 vrf_key: String,
86 pool: Option<String>,
87 op_cert_counter: u64,
88 proto_major: u64,
89 proto_minor: u64,
90 parent_hash: String,
91 ) -> Self {
92 Self {
93 hash,
94 epoch_no,
95 abs_slot,
96 epoch_slot,
97 block_height,
98 block_size,
99 block_time,
100 tx_count,
101 vrf_key,
102 pool,
103 op_cert_counter,
104 proto_major,
105 proto_minor,
106 parent_hash,
107 }
108 }
109}
110
111#[derive(Debug, Clone, Serialize, Deserialize)]
112pub struct BlockTxInfo {
113 pub tx_hash: String,
114 pub block_hash: String,
115 pub block_height: u64,
116 pub epoch_no: u64,
117 pub epoch_slot: u64,
118 pub absolute_slot: u64,
119 pub tx_timestamp: u64,
120 pub tx_block_index: u64,
121 pub tx_size: u64,
122 pub total_output: String,
123 pub fee: String,
124 pub treasury_donation: String,
125 pub deposit: String,
126 #[serde(skip_serializing_if = "Option::is_none")]
127 pub invalid_before: Option<String>,
128 #[serde(skip_serializing_if = "Option::is_none")]
129 pub invalid_after: Option<String>,
130 #[serde(skip_serializing_if = "Option::is_none")]
131 pub collateral_inputs: Option<Vec<TransactionOutput>>,
132 #[serde(skip_serializing_if = "Option::is_none")]
133 pub collateral_output: Option<Vec<TransactionOutput>>,
134 #[serde(skip_serializing_if = "Option::is_none")]
135 pub reference_inputs: Option<Vec<TransactionOutput>>,
136 #[serde(skip_serializing_if = "Option::is_none")]
137 pub inputs: Option<Vec<TransactionOutput>>,
138 pub outputs: Vec<TransactionOutput>,
139 #[serde(skip_serializing_if = "Option::is_none")]
140 pub withdrawals: Option<Vec<Withdrawal>>,
141 #[serde(skip_serializing_if = "Option::is_none")]
142 pub assets_minted: Option<Vec<AssetItem>>,
143 #[serde(skip_serializing_if = "Option::is_none")]
144 pub metadata: Option<serde_json::Value>,
145 #[serde(skip_serializing_if = "Option::is_none")]
146 pub certificates: Option<Vec<Certificate>>,
147 #[serde(skip_serializing_if = "Option::is_none")]
148 pub native_scripts: Option<Vec<NativeScript>>,
149 #[serde(skip_serializing_if = "Option::is_none")]
150 pub plutus_contracts: Option<Vec<PlutusContract>>,
151 #[serde(skip_serializing_if = "Option::is_none")]
152 pub voting_procedures: Option<Vec<VotingProcedure>>,
153 #[serde(skip_serializing_if = "Option::is_none")]
154 pub proposal_procedures: Option<Vec<ProposalProcedure>>,
155}
156
157#[derive(Debug, Clone, Serialize, Deserialize)]
158pub struct TxOutput {
159 pub payment_addr: PaymentAddress,
160 #[serde(skip_serializing_if = "Option::is_none")]
161 pub stake_addr: Option<String>,
162 pub tx_hash: String,
163 pub tx_index: u64,
164 pub value: String,
165}