cml_chain/block/
mod.rs

1// This file was code-generated using an experimental CDDL to rust tool:
2// https://github.com/dcSpark/cddl-codegen
3
4pub mod cbor_encodings;
5pub mod serialization;
6
7use super::TransactionIndex;
8use crate::auxdata::AuxiliaryData;
9use crate::crypto::{
10    BlockBodyHash, BlockHeaderHash, Ed25519Signature, KESSignature, KESVkey, VRFCert, VRFVkey, Vkey,
11};
12use crate::transaction::{TransactionBody, TransactionWitnessSet};
13use cbor_encodings::{
14    BlockEncoding, HeaderBodyEncoding, HeaderEncoding, OperationalCertEncoding,
15    ProtocolVersionEncoding,
16};
17use cml_core::ordered_hash_map::OrderedHashMap;
18use std::collections::BTreeMap;
19
20#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
21pub struct Block {
22    pub header: Header,
23    pub transaction_bodies: Vec<TransactionBody>,
24    pub transaction_witness_sets: Vec<TransactionWitnessSet>,
25    pub auxiliary_data_set: OrderedHashMap<TransactionIndex, AuxiliaryData>,
26    pub invalid_transactions: Vec<TransactionIndex>,
27    #[serde(skip)]
28    pub encodings: Option<BlockEncoding>,
29}
30
31impl Block {
32    pub fn new(
33        header: Header,
34        transaction_bodies: Vec<TransactionBody>,
35        transaction_witness_sets: Vec<TransactionWitnessSet>,
36        auxiliary_data_set: OrderedHashMap<TransactionIndex, AuxiliaryData>,
37        invalid_transactions: Vec<TransactionIndex>,
38    ) -> Self {
39        Self {
40            header,
41            transaction_bodies,
42            transaction_witness_sets,
43            auxiliary_data_set,
44            invalid_transactions,
45            encodings: None,
46        }
47    }
48}
49
50#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
51pub struct Header {
52    pub header_body: HeaderBody,
53    pub body_signature: KESSignature,
54    #[serde(skip)]
55    pub encodings: Option<HeaderEncoding>,
56}
57
58impl Header {
59    pub fn new(header_body: HeaderBody, body_signature: KESSignature) -> Self {
60        Self {
61            header_body,
62            body_signature,
63            encodings: None,
64        }
65    }
66}
67
68#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
69pub struct HeaderBody {
70    pub block_number: u64,
71    pub slot: u64,
72    pub prev_hash: Option<BlockHeaderHash>,
73    pub issuer_vkey: Vkey,
74    pub vrf_vkey: VRFVkey,
75    pub vrf_result: VRFCert,
76    pub block_body_size: u64,
77    pub block_body_hash: BlockBodyHash,
78    pub operational_cert: OperationalCert,
79    pub protocol_version: ProtocolVersion,
80    #[serde(skip)]
81    pub encodings: Option<HeaderBodyEncoding>,
82}
83
84impl HeaderBody {
85    #[allow(clippy::too_many_arguments)]
86    pub fn new(
87        block_number: u64,
88        slot: u64,
89        prev_hash: Option<BlockHeaderHash>,
90        issuer_vkey: Vkey,
91        vrf_vkey: VRFVkey,
92        vrf_result: VRFCert,
93        block_body_size: u64,
94        block_body_hash: BlockBodyHash,
95        operational_cert: OperationalCert,
96        protocol_version: ProtocolVersion,
97    ) -> Self {
98        Self {
99            block_number,
100            slot,
101            prev_hash,
102            issuer_vkey,
103            vrf_vkey,
104            vrf_result,
105            block_body_size,
106            block_body_hash,
107            operational_cert,
108            protocol_version,
109            encodings: None,
110        }
111    }
112}
113
114#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
115pub struct OperationalCert {
116    pub hot_vkey: KESVkey,
117    pub sequence_number: u64,
118    pub kes_period: u64,
119    pub sigma: Ed25519Signature,
120    #[serde(skip)]
121    pub encodings: Option<OperationalCertEncoding>,
122}
123
124impl OperationalCert {
125    pub fn new(
126        hot_vkey: KESVkey,
127        sequence_number: u64,
128        kes_period: u64,
129        sigma: Ed25519Signature,
130    ) -> Self {
131        Self {
132            hot_vkey,
133            sequence_number,
134            kes_period,
135            sigma,
136            encodings: None,
137        }
138    }
139}
140
141#[derive(Clone, Debug, serde::Deserialize, serde::Serialize, schemars::JsonSchema)]
142pub struct ProtocolVersion {
143    pub major: u64,
144    pub minor: u64,
145    #[serde(skip)]
146    pub encodings: Option<ProtocolVersionEncoding>,
147}
148
149impl ProtocolVersion {
150    pub fn new(major: u64, minor: u64) -> Self {
151        Self {
152            major,
153            minor,
154            encodings: None,
155        }
156    }
157}