cml_multi_era_wasm/
lib.rs

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
14// We export types from cip25/cip36 in order to have them be exported to WASM
15// to allow this crate to be like cml + multi-era (e.g. all functionality).
16// See comment in cml/wasm/src/lib.rs
17pub use cml_cip25_wasm::CIP25Metadata;
18pub use cml_cip36_wasm::CIP36DeregistrationCbor;
19
20// This file was code-generated using an experimental CDDL to rust tool:
21// https://github.com/dcSpark/cddl-codegen
22
23use 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);