cml_chain_wasm/block/
mod.rs1use 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}