cml_chain_wasm/block/
mod.rs

1// This file was code-generated using an experimental CDDL to rust tool:
2// https://github.com/dcSpark/cddl-codegen
3
4use super::{
5    MapTransactionIndexToAuxiliaryData, TransactionBodyList, TransactionIndex,
6    TransactionWitnessSetList,
7};
8use crate::crypto::{KESSignature, VRFCert, Vkey};
9use cml_core_wasm::{impl_wasm_cbor_json_api, impl_wasm_conversions};
10use cml_crypto_wasm::{BlockBodyHash, BlockHeaderHash, Ed25519Signature, KESVkey, VRFVkey};
11use wasm_bindgen::prelude::wasm_bindgen;
12
13#[derive(Clone, Debug)]
14#[wasm_bindgen]
15pub struct Block(cml_chain::block::Block);
16
17impl_wasm_cbor_json_api!(Block);
18
19impl_wasm_conversions!(cml_chain::block::Block, Block);
20
21#[wasm_bindgen]
22impl Block {
23    pub fn header(&self) -> Header {
24        self.0.header.clone().into()
25    }
26
27    pub fn transaction_bodies(&self) -> TransactionBodyList {
28        self.0.transaction_bodies.clone().into()
29    }
30
31    pub fn transaction_witness_sets(&self) -> TransactionWitnessSetList {
32        self.0.transaction_witness_sets.clone().into()
33    }
34
35    pub fn auxiliary_data_set(&self) -> MapTransactionIndexToAuxiliaryData {
36        self.0.auxiliary_data_set.clone().into()
37    }
38
39    pub fn invalid_transactions(&self) -> Vec<TransactionIndex> {
40        self.0.invalid_transactions.clone()
41    }
42
43    pub fn new(
44        header: &Header,
45        transaction_bodies: &TransactionBodyList,
46        transaction_witness_sets: &TransactionWitnessSetList,
47        auxiliary_data_set: &MapTransactionIndexToAuxiliaryData,
48        invalid_transactions: Vec<TransactionIndex>,
49    ) -> Self {
50        Self(cml_chain::block::Block::new(
51            header.clone().into(),
52            transaction_bodies.clone().into(),
53            transaction_witness_sets.clone().into(),
54            auxiliary_data_set.clone().into(),
55            invalid_transactions,
56        ))
57    }
58}
59
60#[derive(Clone, Debug)]
61#[wasm_bindgen]
62pub struct Header(cml_chain::block::Header);
63
64impl_wasm_cbor_json_api!(Header);
65
66impl_wasm_conversions!(cml_chain::block::Header, Header);
67
68#[wasm_bindgen]
69impl Header {
70    pub fn header_body(&self) -> HeaderBody {
71        self.0.header_body.clone().into()
72    }
73
74    pub fn body_signature(&self) -> KESSignature {
75        self.0.body_signature.clone().into()
76    }
77
78    pub fn new(header_body: &HeaderBody, body_signature: &KESSignature) -> Self {
79        Self(cml_chain::block::Header::new(
80            header_body.clone().into(),
81            body_signature.clone().into(),
82        ))
83    }
84}
85
86#[derive(Clone, Debug)]
87#[wasm_bindgen]
88pub struct HeaderBody(cml_chain::block::HeaderBody);
89
90impl_wasm_cbor_json_api!(HeaderBody);
91
92impl_wasm_conversions!(cml_chain::block::HeaderBody, HeaderBody);
93
94#[wasm_bindgen]
95impl HeaderBody {
96    pub fn block_number(&self) -> u64 {
97        self.0.block_number
98    }
99
100    pub fn slot(&self) -> u64 {
101        self.0.slot
102    }
103
104    pub fn prev_hash(&self) -> Option<BlockHeaderHash> {
105        self.0.prev_hash.map(std::convert::Into::into)
106    }
107
108    pub fn issuer_vkey(&self) -> Vkey {
109        self.0.issuer_vkey.clone().into()
110    }
111
112    pub fn vrf_vkey(&self) -> VRFVkey {
113        self.0.vrf_vkey.into()
114    }
115
116    pub fn vrf_result(&self) -> VRFCert {
117        self.0.vrf_result.clone().into()
118    }
119
120    pub fn block_body_size(&self) -> u64 {
121        self.0.block_body_size
122    }
123
124    pub fn block_body_hash(&self) -> BlockBodyHash {
125        self.0.block_body_hash.into()
126    }
127
128    pub fn operational_cert(&self) -> OperationalCert {
129        self.0.operational_cert.clone().into()
130    }
131
132    pub fn protocol_version(&self) -> ProtocolVersion {
133        self.0.protocol_version.clone().into()
134    }
135
136    pub fn new(
137        block_number: u64,
138        slot: u64,
139        prev_hash: Option<BlockHeaderHash>,
140        issuer_vkey: &Vkey,
141        vrf_vkey: &VRFVkey,
142        vrf_result: &VRFCert,
143        block_body_size: u64,
144        block_body_hash: &BlockBodyHash,
145        operational_cert: &OperationalCert,
146        protocol_version: &ProtocolVersion,
147    ) -> Self {
148        Self(cml_chain::block::HeaderBody::new(
149            block_number,
150            slot,
151            prev_hash.map(Into::into),
152            issuer_vkey.clone().into(),
153            vrf_vkey.clone().into(),
154            vrf_result.clone().into(),
155            block_body_size,
156            block_body_hash.clone().into(),
157            operational_cert.clone().into(),
158            protocol_version.clone().into(),
159        ))
160    }
161}
162
163#[derive(Clone, Debug)]
164#[wasm_bindgen]
165pub struct OperationalCert(cml_chain::block::OperationalCert);
166
167impl_wasm_cbor_json_api!(OperationalCert);
168
169impl_wasm_conversions!(cml_chain::block::OperationalCert, OperationalCert);
170
171#[wasm_bindgen]
172impl OperationalCert {
173    pub fn hot_vkey(&self) -> KESVkey {
174        self.0.hot_vkey.into()
175    }
176
177    pub fn sequence_number(&self) -> u64 {
178        self.0.sequence_number
179    }
180
181    pub fn kes_period(&self) -> u64 {
182        self.0.kes_period
183    }
184
185    pub fn sigma(&self) -> Ed25519Signature {
186        self.0.sigma.clone().into()
187    }
188
189    pub fn new(
190        hot_vkey: &KESVkey,
191        sequence_number: u64,
192        kes_period: u64,
193        sigma: &Ed25519Signature,
194    ) -> Self {
195        Self(cml_chain::block::OperationalCert::new(
196            hot_vkey.clone().into(),
197            sequence_number,
198            kes_period,
199            sigma.clone().into(),
200        ))
201    }
202}
203
204#[derive(Clone, Debug)]
205#[wasm_bindgen]
206pub struct ProtocolVersion(cml_chain::block::ProtocolVersion);
207
208impl_wasm_cbor_json_api!(ProtocolVersion);
209
210impl_wasm_conversions!(cml_chain::block::ProtocolVersion, ProtocolVersion);
211
212#[wasm_bindgen]
213impl ProtocolVersion {
214    pub fn major(&self) -> u64 {
215        self.0.major
216    }
217
218    pub fn minor(&self) -> u64 {
219        self.0.minor
220    }
221
222    pub fn new(major: u64, minor: u64) -> Self {
223        Self(cml_chain::block::ProtocolVersion::new(major, minor))
224    }
225}