1#![allow(
2 clippy::len_without_is_empty,
3 clippy::too_many_arguments,
4 clippy::new_without_default
5)]
6pub mod allegra;
7pub mod alonzo;
8pub mod babbage;
9pub mod byron;
10pub mod mary;
11pub mod shelley;
12pub mod utils;
13
14pub use cml_cip25_wasm::CIP25Metadata;
18pub use cml_cip36_wasm::CIP36DeregistrationCbor;
19
20use crate::{
24 allegra::{
25 AllegraAuxiliaryData, AllegraBlock, AllegraCertificate, AllegraTransactionBody,
26 AllegraTransactionWitnessSet,
27 },
28 alonzo::{
29 AlonzoAuxiliaryData, AlonzoBlock, AlonzoRedeemer, AlonzoTransactionBody,
30 AlonzoTransactionWitnessSet,
31 },
32 babbage::{
33 BabbageAuxiliaryData, BabbageBlock, BabbageTransactionBody, BabbageTransactionOutput,
34 BabbageTransactionWitnessSet,
35 },
36 byron::{block::ByronBlock, transaction::ByronTx},
37 mary::{MaryBlock, MaryTransactionBody, MaryTransactionOutput},
38 shelley::{
39 MultisigScript, ShelleyBlock, ShelleyCertificate, ShelleyRelay, ShelleyTransactionBody,
40 ShelleyTransactionOutput, ShelleyTransactionWitnessSet,
41 },
42};
43use cml_chain_wasm::{
44 block::Block,
45 certs::StakeCredential,
46 transaction::{AlonzoFormatTxOut, TransactionBody},
47 Coin, StakeCredentialList, TransactionIndex,
48};
49use cml_core_wasm::{
50 impl_wasm_cbor_json_api, impl_wasm_conversions, impl_wasm_list, impl_wasm_map,
51};
52use cml_crypto_wasm::GenesisHash;
53use wasm_bindgen::prelude::wasm_bindgen;
54
55impl_wasm_list!(
56 cml_multi_era::allegra::AllegraCertificate,
57 AllegraCertificate,
58 AllegraCertificateList
59);
60
61impl_wasm_list!(
62 cml_multi_era::allegra::AllegraTransactionBody,
63 AllegraTransactionBody,
64 AllegraTransactionBodyList
65);
66
67impl_wasm_list!(
68 cml_multi_era::allegra::AllegraTransactionWitnessSet,
69 AllegraTransactionWitnessSet,
70 AllegraTransactionWitnessSetList
71);
72
73impl_wasm_list!(
74 cml_multi_era::alonzo::AlonzoRedeemer,
75 AlonzoRedeemer,
76 AlonzoRedeemerList
77);
78
79impl_wasm_list!(
80 cml_multi_era::alonzo::AlonzoTransactionBody,
81 AlonzoTransactionBody,
82 AlonzoTransactionBodyList
83);
84
85impl_wasm_list!(
86 cml_multi_era::alonzo::AlonzoTransactionWitnessSet,
87 AlonzoTransactionWitnessSet,
88 AlonzoTransactionWitnessSetList
89);
90
91impl_wasm_list!(
92 cml_chain::transaction::AlonzoFormatTxOut,
93 AlonzoFormatTxOut,
94 AlonzoFormatTxOutList
95);
96
97impl_wasm_list!(
98 cml_multi_era::babbage::BabbageTransactionBody,
99 BabbageTransactionBody,
100 BabbageTransactionBodyList
101);
102
103impl_wasm_list!(
104 cml_multi_era::babbage::BabbageTransactionOutput,
105 BabbageTransactionOutput,
106 BabbageTransactionOutputList
107);
108
109impl_wasm_list!(
110 cml_multi_era::babbage::BabbageTransactionWitnessSet,
111 BabbageTransactionWitnessSet,
112 BabbageTransactionWitnessSetList
113);
114
115impl_wasm_list!(cml_crypto::GenesisHash, GenesisHash, GenesisHashList);
116
117impl_wasm_map!(
118 cml_chain::certs::StakeCredential,
119 cml_chain::assets::Coin,
120 StakeCredential,
121 Coin,
122 StakeCredentialList,
123 MapStakeCredentialToCoin,
124 false,
125 true,
126 false,
127 true
128);
129
130impl_wasm_map!(
131 cml_chain::TransactionIndex,
132 cml_multi_era::allegra::AllegraAuxiliaryData,
133 TransactionIndex,
134 AllegraAuxiliaryData,
135 Vec<TransactionIndex>,
136 MapTransactionIndexToAllegraAuxiliaryData,
137 true,
138 false,
139 true,
140 false
141);
142
143impl_wasm_map!(
144 cml_chain::TransactionIndex,
145 cml_multi_era::alonzo::AlonzoAuxiliaryData,
146 TransactionIndex,
147 AlonzoAuxiliaryData,
148 Vec<TransactionIndex>,
149 MapTransactionIndexToAlonzoAuxiliaryData,
150 true,
151 false,
152 true,
153 false
154);
155
156impl_wasm_map!(
157 cml_chain::TransactionIndex,
158 cml_multi_era::babbage::BabbageAuxiliaryData,
159 TransactionIndex,
160 BabbageAuxiliaryData,
161 Vec<TransactionIndex>,
162 MapTransactionIndexToBabbageAuxiliaryData,
163 true,
164 false,
165 true,
166 false
167);
168
169impl_wasm_map!(
170 cml_chain::TransactionIndex,
171 cml_chain::auxdata::Metadata,
172 TransactionIndex,
173 cml_chain_wasm::auxdata::Metadata,
174 Vec<TransactionIndex>,
175 MapTransactionIndexToMetadata,
176 true,
177 false,
178 true,
179 false
180);
181
182impl_wasm_list!(
183 cml_multi_era::mary::MaryTransactionOutput,
184 MaryTransactionOutput,
185 MaryTransactionOutputList
186);
187
188impl_wasm_list!(
189 cml_multi_era::mary::MaryTransactionBody,
190 MaryTransactionBody,
191 MaryTransactionBodyList
192);
193
194impl_wasm_list!(
195 cml_multi_era::shelley::MultisigScript,
196 MultisigScript,
197 MultisigScriptList
198);
199
200#[derive(Clone, Debug)]
201#[wasm_bindgen]
202pub struct MultiEraBlock(cml_multi_era::MultiEraBlock);
203
204impl_wasm_cbor_json_api!(MultiEraBlock);
205
206impl_wasm_conversions!(cml_multi_era::MultiEraBlock, MultiEraBlock);
207
208#[wasm_bindgen]
209impl MultiEraBlock {
210 pub fn new_byron(byron: &ByronBlock) -> Self {
211 Self(cml_multi_era::MultiEraBlock::new_byron(
212 byron.clone().into(),
213 ))
214 }
215
216 pub fn new_shelley(shelley: &ShelleyBlock) -> Self {
217 Self(cml_multi_era::MultiEraBlock::new_shelley(
218 shelley.clone().into(),
219 ))
220 }
221
222 pub fn new_allegra(allegra: &AllegraBlock) -> Self {
223 Self(cml_multi_era::MultiEraBlock::new_allegra(
224 allegra.clone().into(),
225 ))
226 }
227
228 pub fn new_mary(mary: &MaryBlock) -> Self {
229 Self(cml_multi_era::MultiEraBlock::new_mary(mary.clone().into()))
230 }
231
232 pub fn new_alonzo(alonzo: &AlonzoBlock) -> Self {
233 Self(cml_multi_era::MultiEraBlock::new_alonzo(
234 alonzo.clone().into(),
235 ))
236 }
237
238 pub fn new_babbage(babbage: &BabbageBlock) -> Self {
239 Self(cml_multi_era::MultiEraBlock::new_babbage(
240 babbage.clone().into(),
241 ))
242 }
243
244 pub fn new_conway(conway: &Block) -> Self {
245 Self(cml_multi_era::MultiEraBlock::new_conway(
246 conway.clone().into(),
247 ))
248 }
249
250 pub fn kind(&self) -> MultiEraBlockKind {
251 match &self.0 {
252 cml_multi_era::MultiEraBlock::Byron(_) => MultiEraBlockKind::Byron,
253 cml_multi_era::MultiEraBlock::Shelley(_) => MultiEraBlockKind::Shelley,
254 cml_multi_era::MultiEraBlock::Allegra(_) => MultiEraBlockKind::Allegra,
255 cml_multi_era::MultiEraBlock::Mary(_) => MultiEraBlockKind::Mary,
256 cml_multi_era::MultiEraBlock::Alonzo(_) => MultiEraBlockKind::Alonzo,
257 cml_multi_era::MultiEraBlock::Babbage(_) => MultiEraBlockKind::Babbage,
258 cml_multi_era::MultiEraBlock::Conway(_) => MultiEraBlockKind::Conway,
259 }
260 }
261
262 pub fn as_byron(&self) -> Option<ByronBlock> {
263 match &self.0 {
264 cml_multi_era::MultiEraBlock::Byron(byron) => Some(byron.clone().into()),
265 _ => None,
266 }
267 }
268
269 pub fn as_shelley(&self) -> Option<ShelleyBlock> {
270 match &self.0 {
271 cml_multi_era::MultiEraBlock::Shelley(shelley) => Some(shelley.clone().into()),
272 _ => None,
273 }
274 }
275
276 pub fn as_allegra(&self) -> Option<AllegraBlock> {
277 match &self.0 {
278 cml_multi_era::MultiEraBlock::Allegra(allegra) => Some(allegra.clone().into()),
279 _ => None,
280 }
281 }
282
283 pub fn as_mary(&self) -> Option<MaryBlock> {
284 match &self.0 {
285 cml_multi_era::MultiEraBlock::Mary(mary) => Some(mary.clone().into()),
286 _ => None,
287 }
288 }
289
290 pub fn as_alonzo(&self) -> Option<AlonzoBlock> {
291 match &self.0 {
292 cml_multi_era::MultiEraBlock::Alonzo(alonzo) => Some(alonzo.clone().into()),
293 _ => None,
294 }
295 }
296
297 pub fn as_babbage(&self) -> Option<BabbageBlock> {
298 match &self.0 {
299 cml_multi_era::MultiEraBlock::Babbage(babbage) => Some(babbage.clone().into()),
300 _ => None,
301 }
302 }
303
304 pub fn as_conway(&self) -> Option<Block> {
305 match &self.0 {
306 cml_multi_era::MultiEraBlock::Conway(conway) => Some(conway.clone().into()),
307 _ => None,
308 }
309 }
310}
311
312#[wasm_bindgen]
313pub enum MultiEraBlockKind {
314 Byron,
315 Shelley,
316 Allegra,
317 Mary,
318 Alonzo,
319 Babbage,
320 Conway,
321}
322
323#[derive(Clone, Debug)]
324#[wasm_bindgen]
325pub struct MultiEraTransactionBody(cml_multi_era::MultiEraTransactionBody);
326
327impl_wasm_cbor_json_api!(MultiEraTransactionBody);
328
329impl_wasm_conversions!(
330 cml_multi_era::MultiEraTransactionBody,
331 MultiEraTransactionBody
332);
333
334#[wasm_bindgen]
335impl MultiEraTransactionBody {
336 pub fn new_byron(byron: &ByronTx) -> Self {
337 Self(cml_multi_era::MultiEraTransactionBody::new_byron(
338 byron.clone().into(),
339 ))
340 }
341
342 pub fn new_shelley(shelley: &ShelleyTransactionBody) -> Self {
343 Self(cml_multi_era::MultiEraTransactionBody::new_shelley(
344 shelley.clone().into(),
345 ))
346 }
347
348 pub fn new_allegra(allegra: &AllegraTransactionBody) -> Self {
349 Self(cml_multi_era::MultiEraTransactionBody::new_allegra(
350 allegra.clone().into(),
351 ))
352 }
353
354 pub fn new_mary(mary: &MaryTransactionBody) -> Self {
355 Self(cml_multi_era::MultiEraTransactionBody::new_mary(
356 mary.clone().into(),
357 ))
358 }
359
360 pub fn new_alonzo(alonzo: &AlonzoTransactionBody) -> Self {
361 Self(cml_multi_era::MultiEraTransactionBody::new_alonzo(
362 alonzo.clone().into(),
363 ))
364 }
365
366 pub fn new_babbage(babbage: &BabbageTransactionBody) -> Self {
367 Self(cml_multi_era::MultiEraTransactionBody::new_babbage(
368 babbage.clone().into(),
369 ))
370 }
371
372 pub fn new_conway(conway: &TransactionBody) -> Self {
373 Self(cml_multi_era::MultiEraTransactionBody::new_conway(
374 conway.clone().into(),
375 ))
376 }
377
378 pub fn kind(&self) -> MultiEraTransactionBodyKind {
379 match &self.0 {
380 cml_multi_era::MultiEraTransactionBody::Byron(_) => MultiEraTransactionBodyKind::Byron,
381 cml_multi_era::MultiEraTransactionBody::Shelley(_) => {
382 MultiEraTransactionBodyKind::Shelley
383 }
384 cml_multi_era::MultiEraTransactionBody::Allegra(_) => {
385 MultiEraTransactionBodyKind::Allegra
386 }
387 cml_multi_era::MultiEraTransactionBody::Mary(_) => MultiEraTransactionBodyKind::Mary,
388 cml_multi_era::MultiEraTransactionBody::Alonzo(_) => {
389 MultiEraTransactionBodyKind::Alonzo
390 }
391 cml_multi_era::MultiEraTransactionBody::Babbage(_) => {
392 MultiEraTransactionBodyKind::Babbage
393 }
394 cml_multi_era::MultiEraTransactionBody::Conway(_) => {
395 MultiEraTransactionBodyKind::Conway
396 }
397 }
398 }
399
400 pub fn as_byron(&self) -> Option<ByronTx> {
401 match &self.0 {
402 cml_multi_era::MultiEraTransactionBody::Byron(byron) => Some(byron.clone().into()),
403 _ => None,
404 }
405 }
406
407 pub fn as_shelley(&self) -> Option<ShelleyTransactionBody> {
408 match &self.0 {
409 cml_multi_era::MultiEraTransactionBody::Shelley(shelley) => {
410 Some(shelley.clone().into())
411 }
412 _ => None,
413 }
414 }
415
416 pub fn as_allegra(&self) -> Option<AllegraTransactionBody> {
417 match &self.0 {
418 cml_multi_era::MultiEraTransactionBody::Allegra(allegra) => {
419 Some(allegra.clone().into())
420 }
421 _ => None,
422 }
423 }
424
425 pub fn as_mary(&self) -> Option<MaryTransactionBody> {
426 match &self.0 {
427 cml_multi_era::MultiEraTransactionBody::Mary(mary) => Some(mary.clone().into()),
428 _ => None,
429 }
430 }
431
432 pub fn as_alonzo(&self) -> Option<AlonzoTransactionBody> {
433 match &self.0 {
434 cml_multi_era::MultiEraTransactionBody::Alonzo(alonzo) => Some(alonzo.clone().into()),
435 _ => None,
436 }
437 }
438
439 pub fn as_babbage(&self) -> Option<BabbageTransactionBody> {
440 match &self.0 {
441 cml_multi_era::MultiEraTransactionBody::Babbage(babbage) => {
442 Some(babbage.clone().into())
443 }
444 _ => None,
445 }
446 }
447
448 pub fn as_conway(&self) -> Option<TransactionBody> {
449 match &self.0 {
450 cml_multi_era::MultiEraTransactionBody::Conway(conway) => Some(conway.clone().into()),
451 _ => None,
452 }
453 }
454}
455
456#[wasm_bindgen]
457pub enum MultiEraTransactionBodyKind {
458 Byron,
459 Shelley,
460 Allegra,
461 Mary,
462 Alonzo,
463 Babbage,
464 Conway,
465}
466
467impl_wasm_list!(
468 cml_multi_era::shelley::ShelleyCertificate,
469 ShelleyCertificate,
470 ShelleyCertificateList
471);
472
473impl_wasm_list!(
474 cml_multi_era::shelley::ShelleyRelay,
475 ShelleyRelay,
476 ShelleyRelayList
477);
478
479impl_wasm_list!(
480 cml_multi_era::shelley::ShelleyTransactionBody,
481 ShelleyTransactionBody,
482 ShelleyTransactionBodyList
483);
484
485impl_wasm_list!(
486 cml_multi_era::shelley::ShelleyTransactionOutput,
487 ShelleyTransactionOutput,
488 ShelleyTransactionOutputList
489);
490
491impl_wasm_list!(
492 cml_multi_era::shelley::ShelleyTransactionWitnessSet,
493 ShelleyTransactionWitnessSet,
494 ShelleyTransactionWitnessSetList
495);