mithril_common/entities/
cardano_block.rs1use crate::entities::{
2 BlockHash, BlockNumber, CardanoBlockTransactionMkTreeNode, CardanoTransaction, SlotNumber,
3 TransactionHash,
4};
5
6#[derive(Debug, Clone, PartialEq)]
8pub struct CardanoBlock {
9 pub block_hash: BlockHash,
11 pub block_number: BlockNumber,
13 pub slot_number: SlotNumber,
15}
16
17impl CardanoBlock {
18 pub fn new<U: Into<BlockHash>>(
20 block_hash: U,
21 block_number: BlockNumber,
22 slot_number: SlotNumber,
23 ) -> Self {
24 Self {
25 block_hash: block_hash.into(),
26 block_number,
27 slot_number,
28 }
29 }
30}
31
32#[derive(Debug, Clone, PartialEq)]
34pub struct CardanoBlockWithTransactions {
35 pub block_hash: BlockHash,
37 pub block_number: BlockNumber,
39 pub slot_number: SlotNumber,
41 pub transactions_hashes: Vec<TransactionHash>,
43}
44
45impl CardanoBlockWithTransactions {
46 pub fn new<U: Into<BlockHash>, T: Into<TransactionHash>>(
48 block_hash: U,
49 block_number: BlockNumber,
50 slot_number: SlotNumber,
51 tx_hashes: Vec<T>,
52 ) -> Self {
53 Self {
54 block_hash: block_hash.into(),
55 block_number,
56 slot_number,
57 transactions_hashes: tx_hashes.into_iter().map(Into::into).collect(),
58 }
59 }
60
61 pub fn into_transactions(self) -> Vec<CardanoTransaction> {
63 self.transactions_hashes
64 .into_iter()
65 .map(|tx_hash| {
66 CardanoTransaction::new(
67 tx_hash,
68 self.block_number,
69 self.slot_number,
70 self.block_hash.clone(),
71 )
72 })
73 .collect()
74 }
75
76 pub fn into_mk_tree_node(self) -> Vec<CardanoBlockTransactionMkTreeNode> {
78 let mut result = Vec::with_capacity(self.transactions_hashes.len() + 1);
79 result.push(CardanoBlockTransactionMkTreeNode::Block {
80 block_hash: self.block_hash.clone(),
81 block_number: self.block_number,
82 slot_number: self.slot_number,
83 });
84 result.extend(self.transactions_hashes.into_iter().map(|tx_hash| {
85 CardanoBlockTransactionMkTreeNode::Transaction {
86 transaction_hash: tx_hash,
87 block_hash: self.block_hash.clone(),
88 block_number: self.block_number,
89 slot_number: self.slot_number,
90 }
91 }));
92
93 result
94 }
95
96 pub fn transactions_count(&self) -> usize {
98 self.transactions_hashes.len()
99 }
100}
101
102impl From<CardanoBlockWithTransactions> for CardanoBlock {
103 fn from(value: CardanoBlockWithTransactions) -> Self {
104 Self {
105 block_hash: value.block_hash,
106 block_number: value.block_number,
107 slot_number: value.slot_number,
108 }
109 }
110}