koios_sdk/models/
block.rs

1use super::{
2    transaction::{Certificate, NativeScript, PlutusContract, ProposalProcedure, VotingProcedure},
3    AssetItem, PaymentAddress, TransactionOutput, Withdrawal,
4};
5use serde::{Deserialize, Serialize};
6
7// Fix missing fields in Block struct
8#[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}