1use crate::shelley::ProtocolVersionStruct;
5use crate::{
6 AllegraCertificateList, AlonzoRedeemerList, BabbageTransactionBodyList,
7 BabbageTransactionOutputList, BabbageTransactionWitnessSetList, GenesisHashList,
8 MapTransactionIndexToBabbageAuxiliaryData,
9};
10use cml_chain_wasm::address::Address;
11use cml_chain_wasm::assets::{Coin, Mint, Value};
12use cml_chain_wasm::auxdata::{ShelleyFormatAuxData, ShelleyMAFormatAuxData};
13use cml_chain_wasm::block::Header;
14use cml_chain_wasm::crypto::{AuxiliaryDataHash, GenesisHash, ScriptDataHash};
15use cml_chain_wasm::plutus::{CostModels, ExUnitPrices, ExUnits, PlutusV1Script, PlutusV2Script};
16use cml_chain_wasm::transaction::{AlonzoFormatTxOut, DatumOption, NativeScript};
17use cml_chain_wasm::{auxdata::Metadata, Epoch, Rational, UnitInterval, Withdrawals};
18use cml_chain_wasm::{
19 BootstrapWitnessList, NativeScriptList, NetworkId, PlutusDataList, PlutusV1ScriptList,
20 PlutusV2ScriptList, RequiredSigners, TransactionInputList, VkeywitnessList,
21};
22use cml_core::ordered_hash_map::OrderedHashMap;
23use cml_core::TransactionIndex;
24use cml_core_wasm::{impl_wasm_cbor_json_api, impl_wasm_conversions};
25use wasm_bindgen::prelude::wasm_bindgen;
26
27#[derive(Clone, Debug)]
28#[wasm_bindgen]
29pub struct BabbageAuxiliaryData(cml_multi_era::babbage::BabbageAuxiliaryData);
30
31impl_wasm_cbor_json_api!(BabbageAuxiliaryData);
32
33impl_wasm_conversions!(
34 cml_multi_era::babbage::BabbageAuxiliaryData,
35 BabbageAuxiliaryData
36);
37
38#[wasm_bindgen]
39impl BabbageAuxiliaryData {
40 pub fn new_shelley(shelley: &ShelleyFormatAuxData) -> Self {
41 Self(cml_multi_era::babbage::BabbageAuxiliaryData::new_shelley(
42 shelley.clone().into(),
43 ))
44 }
45
46 pub fn new_shelley_ma(shelley_ma: &ShelleyMAFormatAuxData) -> Self {
47 Self(
48 cml_multi_era::babbage::BabbageAuxiliaryData::new_shelley_ma(shelley_ma.clone().into()),
49 )
50 }
51
52 pub fn new_babbage(babbage: &BabbageFormatAuxData) -> Self {
53 Self(cml_multi_era::babbage::BabbageAuxiliaryData::new_babbage(
54 babbage.clone().into(),
55 ))
56 }
57
58 pub fn kind(&self) -> BabbageAuxiliaryDataKind {
59 match &self.0 {
60 cml_multi_era::babbage::BabbageAuxiliaryData::Shelley(_) => {
61 BabbageAuxiliaryDataKind::Shelley
62 }
63 cml_multi_era::babbage::BabbageAuxiliaryData::ShelleyMA(_) => {
64 BabbageAuxiliaryDataKind::ShelleyMA
65 }
66 cml_multi_era::babbage::BabbageAuxiliaryData::Babbage(_) => {
67 BabbageAuxiliaryDataKind::Babbage
68 }
69 }
70 }
71
72 pub fn as_shelley(&self) -> Option<ShelleyFormatAuxData> {
73 match &self.0 {
74 cml_multi_era::babbage::BabbageAuxiliaryData::Shelley(shelley) => {
75 Some(shelley.clone().into())
76 }
77 _ => None,
78 }
79 }
80
81 pub fn as_shelley_ma(&self) -> Option<ShelleyMAFormatAuxData> {
82 match &self.0 {
83 cml_multi_era::babbage::BabbageAuxiliaryData::ShelleyMA(shelley_ma) => {
84 Some(shelley_ma.clone().into())
85 }
86 _ => None,
87 }
88 }
89
90 pub fn as_babbage(&self) -> Option<BabbageFormatAuxData> {
91 match &self.0 {
92 cml_multi_era::babbage::BabbageAuxiliaryData::Babbage(babbage) => {
93 Some(babbage.clone().into())
94 }
95 _ => None,
96 }
97 }
98}
99
100#[wasm_bindgen]
101pub enum BabbageAuxiliaryDataKind {
102 Shelley,
103 ShelleyMA,
104 Babbage,
105}
106
107#[derive(Clone, Debug)]
108#[wasm_bindgen]
109pub struct BabbageBlock(cml_multi_era::babbage::BabbageBlock);
110
111impl_wasm_cbor_json_api!(BabbageBlock);
112
113impl_wasm_conversions!(cml_multi_era::babbage::BabbageBlock, BabbageBlock);
114
115#[wasm_bindgen]
116impl BabbageBlock {
117 pub fn header(&self) -> Header {
118 self.0.header.clone().into()
119 }
120
121 pub fn transaction_bodies(&self) -> BabbageTransactionBodyList {
122 self.0.transaction_bodies.clone().into()
123 }
124
125 pub fn transaction_witness_sets(&self) -> BabbageTransactionWitnessSetList {
126 self.0.transaction_witness_sets.clone().into()
127 }
128
129 pub fn auxiliary_data_set(&self) -> MapTransactionIndexToBabbageAuxiliaryData {
130 self.0.auxiliary_data_set.clone().into()
131 }
132
133 pub fn invalid_transactions(&self) -> Vec<TransactionIndex> {
134 self.0.invalid_transactions.clone()
135 }
136
137 pub fn new(
138 header: &Header,
139 transaction_bodies: &BabbageTransactionBodyList,
140 transaction_witness_sets: &BabbageTransactionWitnessSetList,
141 auxiliary_data_set: &MapTransactionIndexToBabbageAuxiliaryData,
142 invalid_transactions: Vec<TransactionIndex>,
143 ) -> Self {
144 Self(cml_multi_era::babbage::BabbageBlock::new(
145 header.clone().into(),
146 transaction_bodies.clone().into(),
147 transaction_witness_sets.clone().into(),
148 auxiliary_data_set.clone().into(),
149 invalid_transactions,
150 ))
151 }
152}
153
154pub type BabbageCostModels = CostModels;
155
156#[derive(Clone, Debug)]
157#[wasm_bindgen]
158pub struct BabbageFormatAuxData(cml_multi_era::babbage::BabbageFormatAuxData);
159
160impl_wasm_cbor_json_api!(BabbageFormatAuxData);
161
162impl_wasm_conversions!(
163 cml_multi_era::babbage::BabbageFormatAuxData,
164 BabbageFormatAuxData
165);
166
167#[wasm_bindgen]
168impl BabbageFormatAuxData {
169 pub fn set_metadata(&mut self, metadata: &Metadata) {
170 self.0.metadata = Some(metadata.clone().into())
171 }
172
173 pub fn metadata(&self) -> Option<Metadata> {
174 self.0.metadata.clone().map(std::convert::Into::into)
175 }
176
177 pub fn set_native_scripts(&mut self, native_scripts: &NativeScriptList) {
178 self.0.native_scripts = Some(native_scripts.clone().into())
179 }
180
181 pub fn native_scripts(&self) -> Option<NativeScriptList> {
182 self.0.native_scripts.clone().map(std::convert::Into::into)
183 }
184
185 pub fn set_plutus_v1_scripts(&mut self, plutus_v1_scripts: &PlutusV1ScriptList) {
186 self.0.plutus_v1_scripts = Some(plutus_v1_scripts.clone().into())
187 }
188
189 pub fn plutus_v1_scripts(&self) -> Option<PlutusV1ScriptList> {
190 self.0
191 .plutus_v1_scripts
192 .clone()
193 .map(std::convert::Into::into)
194 }
195
196 pub fn set_plutus_v2_scripts(&mut self, plutus_v2_scripts: &PlutusV2ScriptList) {
197 self.0.plutus_v2_scripts = Some(plutus_v2_scripts.clone().into())
198 }
199
200 pub fn plutus_v2_scripts(&self) -> Option<PlutusV2ScriptList> {
201 self.0
202 .plutus_v2_scripts
203 .clone()
204 .map(std::convert::Into::into)
205 }
206
207 pub fn new() -> Self {
208 Self(cml_multi_era::babbage::BabbageFormatAuxData::new())
209 }
210}
211
212#[derive(Clone, Debug)]
213#[wasm_bindgen]
214pub struct BabbageFormatTxOut(cml_multi_era::babbage::BabbageFormatTxOut);
215
216impl_wasm_cbor_json_api!(BabbageFormatTxOut);
217
218impl_wasm_conversions!(
219 cml_multi_era::babbage::BabbageFormatTxOut,
220 BabbageFormatTxOut
221);
222
223#[wasm_bindgen]
224impl BabbageFormatTxOut {
225 pub fn address(&self) -> Address {
226 self.0.address.clone().into()
227 }
228
229 pub fn amount(&self) -> Value {
230 self.0.amount.clone().into()
231 }
232
233 pub fn set_datum_option(&mut self, datum_option: &DatumOption) {
234 self.0.datum_option = Some(datum_option.clone().into())
235 }
236
237 pub fn datum_option(&self) -> Option<DatumOption> {
238 self.0.datum_option.clone().map(std::convert::Into::into)
239 }
240
241 pub fn set_script_reference(&mut self, script_reference: &BabbageScriptRef) {
242 self.0.script_reference = Some(script_reference.clone().into())
243 }
244
245 pub fn script_reference(&self) -> Option<BabbageScriptRef> {
246 self.0
247 .script_reference
248 .clone()
249 .map(std::convert::Into::into)
250 }
251
252 pub fn new(address: &Address, amount: &Value) -> Self {
253 Self(cml_multi_era::babbage::BabbageFormatTxOut::new(
254 address.clone().into(),
255 amount.clone().into(),
256 ))
257 }
258}
259
260#[derive(Clone, Debug)]
261#[wasm_bindgen]
262pub struct BabbageProposedProtocolParameterUpdates(
263 cml_multi_era::babbage::BabbageProposedProtocolParameterUpdates,
264);
265
266impl_wasm_conversions!(
267 cml_multi_era::babbage::BabbageProposedProtocolParameterUpdates,
268 BabbageProposedProtocolParameterUpdates
269);
270
271#[wasm_bindgen]
272impl BabbageProposedProtocolParameterUpdates {
273 pub fn new() -> Self {
274 Self(OrderedHashMap::new())
275 }
276
277 pub fn len(&self) -> usize {
278 self.0.len()
279 }
280
281 pub fn insert(
282 &mut self,
283 key: &GenesisHash,
284 value: &BabbageProtocolParamUpdate,
285 ) -> Option<BabbageProtocolParamUpdate> {
286 self.0
287 .insert(key.clone().into(), value.clone().into())
288 .map(Into::into)
289 }
290
291 pub fn get(&self, key: &GenesisHash) -> Option<BabbageProtocolParamUpdate> {
292 self.0.get(key.as_ref()).map(|v| v.clone().into())
293 }
294
295 pub fn keys(&self) -> GenesisHashList {
296 self.0.iter().map(|(k, _v)| *k).collect::<Vec<_>>().into()
297 }
298}
299
300#[derive(Clone, Debug)]
301#[wasm_bindgen]
302pub struct BabbageProtocolParamUpdate(cml_multi_era::babbage::BabbageProtocolParamUpdate);
303
304impl_wasm_cbor_json_api!(BabbageProtocolParamUpdate);
305
306impl_wasm_conversions!(
307 cml_multi_era::babbage::BabbageProtocolParamUpdate,
308 BabbageProtocolParamUpdate
309);
310
311#[wasm_bindgen]
312impl BabbageProtocolParamUpdate {
313 pub fn set_minfee_a(&mut self, minfee_a: u64) {
314 self.0.minfee_a = Some(minfee_a)
315 }
316
317 pub fn minfee_a(&self) -> Option<u64> {
318 self.0.minfee_a
319 }
320
321 pub fn set_minfee_b(&mut self, minfee_b: u64) {
322 self.0.minfee_b = Some(minfee_b)
323 }
324
325 pub fn minfee_b(&self) -> Option<u64> {
326 self.0.minfee_b
327 }
328
329 pub fn set_max_block_body_size(&mut self, max_block_body_size: u64) {
330 self.0.max_block_body_size = Some(max_block_body_size)
331 }
332
333 pub fn max_block_body_size(&self) -> Option<u64> {
334 self.0.max_block_body_size
335 }
336
337 pub fn set_max_transaction_size(&mut self, max_transaction_size: u64) {
338 self.0.max_transaction_size = Some(max_transaction_size)
339 }
340
341 pub fn max_transaction_size(&self) -> Option<u64> {
342 self.0.max_transaction_size
343 }
344
345 pub fn set_max_block_header_size(&mut self, max_block_header_size: u64) {
346 self.0.max_block_header_size = Some(max_block_header_size)
347 }
348
349 pub fn max_block_header_size(&self) -> Option<u64> {
350 self.0.max_block_header_size
351 }
352
353 pub fn set_key_deposit(&mut self, key_deposit: Coin) {
354 self.0.key_deposit = Some(key_deposit)
355 }
356
357 pub fn key_deposit(&self) -> Option<Coin> {
358 self.0.key_deposit
359 }
360
361 pub fn set_pool_deposit(&mut self, pool_deposit: Coin) {
362 self.0.pool_deposit = Some(pool_deposit)
363 }
364
365 pub fn pool_deposit(&self) -> Option<Coin> {
366 self.0.pool_deposit
367 }
368
369 pub fn set_maximum_epoch(&mut self, maximum_epoch: Epoch) {
370 self.0.maximum_epoch = Some(maximum_epoch)
371 }
372
373 pub fn maximum_epoch(&self) -> Option<Epoch> {
374 self.0.maximum_epoch
375 }
376
377 pub fn set_n_opt(&mut self, n_opt: u64) {
378 self.0.n_opt = Some(n_opt)
379 }
380
381 pub fn n_opt(&self) -> Option<u64> {
382 self.0.n_opt
383 }
384
385 pub fn set_pool_pledge_influence(&mut self, pool_pledge_influence: &Rational) {
386 self.0.pool_pledge_influence = Some(pool_pledge_influence.clone().into())
387 }
388
389 pub fn pool_pledge_influence(&self) -> Option<Rational> {
390 self.0
391 .pool_pledge_influence
392 .clone()
393 .map(std::convert::Into::into)
394 }
395
396 pub fn set_expansion_rate(&mut self, expansion_rate: &UnitInterval) {
397 self.0.expansion_rate = Some(expansion_rate.clone().into())
398 }
399
400 pub fn expansion_rate(&self) -> Option<UnitInterval> {
401 self.0.expansion_rate.clone().map(std::convert::Into::into)
402 }
403
404 pub fn set_treasury_growth_rate(&mut self, treasury_growth_rate: &UnitInterval) {
405 self.0.treasury_growth_rate = Some(treasury_growth_rate.clone().into())
406 }
407
408 pub fn treasury_growth_rate(&self) -> Option<UnitInterval> {
409 self.0
410 .treasury_growth_rate
411 .clone()
412 .map(std::convert::Into::into)
413 }
414
415 pub fn set_protocol_version(&mut self, protocol_version: &ProtocolVersionStruct) {
416 self.0.protocol_version = Some(protocol_version.clone().into())
417 }
418
419 pub fn protocol_version(&self) -> Option<ProtocolVersionStruct> {
420 self.0
421 .protocol_version
422 .clone()
423 .map(std::convert::Into::into)
424 }
425
426 pub fn set_min_pool_cost(&mut self, min_pool_cost: Coin) {
427 self.0.min_pool_cost = Some(min_pool_cost)
428 }
429
430 pub fn min_pool_cost(&self) -> Option<Coin> {
431 self.0.min_pool_cost
432 }
433
434 pub fn set_ada_per_utxo_byte(&mut self, ada_per_utxo_byte: Coin) {
435 self.0.ada_per_utxo_byte = Some(ada_per_utxo_byte)
436 }
437
438 pub fn ada_per_utxo_byte(&self) -> Option<Coin> {
439 self.0.ada_per_utxo_byte
440 }
441
442 pub fn set_cost_models_for_script_languages(
443 &mut self,
444 cost_models_for_script_languages: &BabbageCostModels,
445 ) {
446 self.0.cost_models_for_script_languages =
447 Some(cost_models_for_script_languages.clone().into())
448 }
449
450 pub fn cost_models_for_script_languages(&self) -> Option<BabbageCostModels> {
451 self.0
452 .cost_models_for_script_languages
453 .clone()
454 .map(std::convert::Into::into)
455 }
456
457 pub fn set_execution_costs(&mut self, execution_costs: &ExUnitPrices) {
458 self.0.execution_costs = Some(execution_costs.clone().into())
459 }
460
461 pub fn execution_costs(&self) -> Option<ExUnitPrices> {
462 self.0.execution_costs.clone().map(std::convert::Into::into)
463 }
464
465 pub fn set_max_tx_ex_units(&mut self, max_tx_ex_units: &ExUnits) {
466 self.0.max_tx_ex_units = Some(max_tx_ex_units.clone().into())
467 }
468
469 pub fn max_tx_ex_units(&self) -> Option<ExUnits> {
470 self.0.max_tx_ex_units.clone().map(std::convert::Into::into)
471 }
472
473 pub fn set_max_block_ex_units(&mut self, max_block_ex_units: &ExUnits) {
474 self.0.max_block_ex_units = Some(max_block_ex_units.clone().into())
475 }
476
477 pub fn max_block_ex_units(&self) -> Option<ExUnits> {
478 self.0
479 .max_block_ex_units
480 .clone()
481 .map(std::convert::Into::into)
482 }
483
484 pub fn set_max_value_size(&mut self, max_value_size: u64) {
485 self.0.max_value_size = Some(max_value_size)
486 }
487
488 pub fn max_value_size(&self) -> Option<u64> {
489 self.0.max_value_size
490 }
491
492 pub fn set_collateral_percentage(&mut self, collateral_percentage: u64) {
493 self.0.collateral_percentage = Some(collateral_percentage)
494 }
495
496 pub fn collateral_percentage(&self) -> Option<u64> {
497 self.0.collateral_percentage
498 }
499
500 pub fn set_max_collateral_inputs(&mut self, max_collateral_inputs: u64) {
501 self.0.max_collateral_inputs = Some(max_collateral_inputs)
502 }
503
504 pub fn max_collateral_inputs(&self) -> Option<u64> {
505 self.0.max_collateral_inputs
506 }
507
508 pub fn new() -> Self {
509 Self(cml_multi_era::babbage::BabbageProtocolParamUpdate::new())
510 }
511}
512
513#[derive(Clone, Debug)]
514#[wasm_bindgen]
515pub struct BabbageScript(cml_multi_era::babbage::BabbageScript);
516
517impl_wasm_cbor_json_api!(BabbageScript);
518
519impl_wasm_conversions!(cml_multi_era::babbage::BabbageScript, BabbageScript);
520
521#[wasm_bindgen]
522impl BabbageScript {
523 pub fn new_native(script: &NativeScript) -> Self {
524 Self(cml_multi_era::babbage::BabbageScript::new_native(
525 script.clone().into(),
526 ))
527 }
528
529 pub fn new_plutus_v1(script: &PlutusV1Script) -> Self {
530 Self(cml_multi_era::babbage::BabbageScript::new_plutus_v1(
531 script.clone().into(),
532 ))
533 }
534
535 pub fn new_plutus_v2(script: &PlutusV2Script) -> Self {
536 Self(cml_multi_era::babbage::BabbageScript::new_plutus_v2(
537 script.clone().into(),
538 ))
539 }
540
541 pub fn kind(&self) -> BabbageScriptKind {
542 match &self.0 {
543 cml_multi_era::babbage::BabbageScript::Native { .. } => BabbageScriptKind::Native,
544 cml_multi_era::babbage::BabbageScript::PlutusV1 { .. } => BabbageScriptKind::PlutusV1,
545 cml_multi_era::babbage::BabbageScript::PlutusV2 { .. } => BabbageScriptKind::PlutusV2,
546 }
547 }
548
549 pub fn as_native(&self) -> Option<NativeScript> {
550 match &self.0 {
551 cml_multi_era::babbage::BabbageScript::Native { script, .. } => {
552 Some(script.clone().into())
553 }
554 _ => None,
555 }
556 }
557
558 pub fn as_plutus_v1(&self) -> Option<PlutusV1Script> {
559 match &self.0 {
560 cml_multi_era::babbage::BabbageScript::PlutusV1 { script, .. } => {
561 Some(script.clone().into())
562 }
563 _ => None,
564 }
565 }
566
567 pub fn as_plutus_v2(&self) -> Option<PlutusV2Script> {
568 match &self.0 {
569 cml_multi_era::babbage::BabbageScript::PlutusV2 { script, .. } => {
570 Some(script.clone().into())
571 }
572 _ => None,
573 }
574 }
575}
576
577#[wasm_bindgen]
578pub enum BabbageScriptKind {
579 Native,
580 PlutusV1,
581 PlutusV2,
582}
583
584pub type BabbageScriptRef = BabbageScript;
585
586#[derive(Clone, Debug)]
587#[wasm_bindgen]
588pub struct BabbageTransaction(cml_multi_era::babbage::BabbageTransaction);
589
590impl_wasm_cbor_json_api!(BabbageTransaction);
591
592impl_wasm_conversions!(
593 cml_multi_era::babbage::BabbageTransaction,
594 BabbageTransaction
595);
596
597#[wasm_bindgen]
598impl BabbageTransaction {
599 pub fn body(&self) -> BabbageTransactionBody {
600 self.0.body.clone().into()
601 }
602
603 pub fn witness_set(&self) -> BabbageTransactionWitnessSet {
604 self.0.witness_set.clone().into()
605 }
606
607 pub fn is_valid(&self) -> bool {
608 self.0.is_valid
609 }
610
611 pub fn auxiliary_data(&self) -> Option<BabbageAuxiliaryData> {
612 self.0.auxiliary_data.clone().map(std::convert::Into::into)
613 }
614
615 pub fn new(
616 body: &BabbageTransactionBody,
617 witness_set: &BabbageTransactionWitnessSet,
618 is_valid: bool,
619 auxiliary_data: Option<BabbageAuxiliaryData>,
620 ) -> Self {
621 Self(cml_multi_era::babbage::BabbageTransaction::new(
622 body.clone().into(),
623 witness_set.clone().into(),
624 is_valid,
625 auxiliary_data.map(Into::into),
626 ))
627 }
628}
629
630#[derive(Clone, Debug)]
631#[wasm_bindgen]
632pub struct BabbageTransactionBody(cml_multi_era::babbage::BabbageTransactionBody);
633
634impl_wasm_cbor_json_api!(BabbageTransactionBody);
635
636impl_wasm_conversions!(
637 cml_multi_era::babbage::BabbageTransactionBody,
638 BabbageTransactionBody
639);
640
641#[wasm_bindgen]
642impl BabbageTransactionBody {
643 pub fn inputs(&self) -> TransactionInputList {
644 self.0.inputs.clone().into()
645 }
646
647 pub fn outputs(&self) -> BabbageTransactionOutputList {
648 self.0.outputs.clone().into()
649 }
650
651 pub fn fee(&self) -> Coin {
652 self.0.fee
653 }
654
655 pub fn set_ttl(&mut self, ttl: u64) {
656 self.0.ttl = Some(ttl)
657 }
658
659 pub fn ttl(&self) -> Option<u64> {
660 self.0.ttl
661 }
662
663 pub fn set_certs(&mut self, certs: &AllegraCertificateList) {
664 self.0.certs = Some(certs.clone().into())
665 }
666
667 pub fn certs(&self) -> Option<AllegraCertificateList> {
668 self.0.certs.clone().map(std::convert::Into::into)
669 }
670
671 pub fn set_withdrawals(&mut self, withdrawals: &Withdrawals) {
672 self.0.withdrawals = Some(withdrawals.clone().into())
673 }
674
675 pub fn withdrawals(&self) -> Option<Withdrawals> {
676 self.0.withdrawals.clone().map(std::convert::Into::into)
677 }
678
679 pub fn set_update(&mut self, update: &BabbageUpdate) {
680 self.0.update = Some(update.clone().into())
681 }
682
683 pub fn update(&self) -> Option<BabbageUpdate> {
684 self.0.update.clone().map(std::convert::Into::into)
685 }
686
687 pub fn set_auxiliary_data_hash(&mut self, auxiliary_data_hash: &AuxiliaryDataHash) {
688 self.0.auxiliary_data_hash = Some(auxiliary_data_hash.clone().into())
689 }
690
691 pub fn auxiliary_data_hash(&self) -> Option<AuxiliaryDataHash> {
692 self.0.auxiliary_data_hash.map(std::convert::Into::into)
693 }
694
695 pub fn set_validity_interval_start(&mut self, validity_interval_start: u64) {
696 self.0.validity_interval_start = Some(validity_interval_start)
697 }
698
699 pub fn validity_interval_start(&self) -> Option<u64> {
700 self.0.validity_interval_start
701 }
702
703 pub fn set_mint(&mut self, mint: &Mint) {
704 self.0.mint = Some(cml_multi_era::babbage::utils::BabbageMint::from(Into::<
706 cml_chain::assets::Mint,
707 >::into(
708 mint.clone(),
709 )))
710 }
711
712 pub fn mint(&self) -> Option<Mint> {
713 self.0
715 .mint
716 .as_ref()
717 .map(|mint| mint.to_mint().to_owned().into())
718 }
719
720 pub fn set_script_data_hash(&mut self, script_data_hash: &ScriptDataHash) {
721 self.0.script_data_hash = Some(script_data_hash.clone().into())
722 }
723
724 pub fn script_data_hash(&self) -> Option<ScriptDataHash> {
725 self.0.script_data_hash.map(std::convert::Into::into)
726 }
727
728 pub fn set_collateral_inputs(&mut self, collateral_inputs: &TransactionInputList) {
729 self.0.collateral_inputs = Some(collateral_inputs.clone().into())
730 }
731
732 pub fn collateral_inputs(&self) -> Option<TransactionInputList> {
733 self.0
734 .collateral_inputs
735 .clone()
736 .map(std::convert::Into::into)
737 }
738
739 pub fn set_required_signers(&mut self, required_signers: &RequiredSigners) {
740 self.0.required_signers = Some(required_signers.clone().into())
741 }
742
743 pub fn required_signers(&self) -> Option<RequiredSigners> {
744 self.0
745 .required_signers
746 .clone()
747 .map(std::convert::Into::into)
748 }
749
750 pub fn set_network_id(&mut self, network_id: &NetworkId) {
751 self.0.network_id = Some(network_id.clone().into())
752 }
753
754 pub fn network_id(&self) -> Option<NetworkId> {
755 self.0.network_id.map(std::convert::Into::into)
756 }
757
758 pub fn set_collateral_return(&mut self, collateral_return: &BabbageTransactionOutput) {
759 self.0.collateral_return = Some(collateral_return.clone().into())
760 }
761
762 pub fn collateral_return(&self) -> Option<BabbageTransactionOutput> {
763 self.0
764 .collateral_return
765 .clone()
766 .map(std::convert::Into::into)
767 }
768
769 pub fn set_total_collateral(&mut self, total_collateral: Coin) {
770 self.0.total_collateral = Some(total_collateral)
771 }
772
773 pub fn total_collateral(&self) -> Option<Coin> {
774 self.0.total_collateral
775 }
776
777 pub fn set_reference_inputs(&mut self, reference_inputs: &TransactionInputList) {
778 self.0.reference_inputs = Some(reference_inputs.clone().into())
779 }
780
781 pub fn reference_inputs(&self) -> Option<TransactionInputList> {
782 self.0
783 .reference_inputs
784 .clone()
785 .map(std::convert::Into::into)
786 }
787
788 pub fn new(
789 inputs: &TransactionInputList,
790 outputs: &BabbageTransactionOutputList,
791 fee: Coin,
792 ) -> Self {
793 Self(cml_multi_era::babbage::BabbageTransactionBody::new(
794 inputs.clone().into(),
795 outputs.clone().into(),
796 fee,
797 ))
798 }
799}
800
801#[derive(Clone, Debug)]
802#[wasm_bindgen]
803pub struct BabbageTransactionOutput(cml_multi_era::babbage::BabbageTransactionOutput);
804
805impl_wasm_cbor_json_api!(BabbageTransactionOutput);
806
807impl_wasm_conversions!(
808 cml_multi_era::babbage::BabbageTransactionOutput,
809 BabbageTransactionOutput
810);
811
812#[wasm_bindgen]
813impl BabbageTransactionOutput {
814 pub fn new_alonzo_format_tx_out(alonzo_format_tx_out: &AlonzoFormatTxOut) -> Self {
815 Self(
816 cml_multi_era::babbage::BabbageTransactionOutput::new_alonzo_format_tx_out(
817 alonzo_format_tx_out.clone().into(),
818 ),
819 )
820 }
821
822 pub fn new_babbage_format_tx_out(babbage_format_tx_out: &BabbageFormatTxOut) -> Self {
823 Self(
824 cml_multi_era::babbage::BabbageTransactionOutput::new_babbage_format_tx_out(
825 babbage_format_tx_out.clone().into(),
826 ),
827 )
828 }
829
830 pub fn kind(&self) -> BabbageTransactionOutputKind {
831 match &self.0 {
832 cml_multi_era::babbage::BabbageTransactionOutput::AlonzoFormatTxOut(_) => {
833 BabbageTransactionOutputKind::AlonzoFormatTxOut
834 }
835 cml_multi_era::babbage::BabbageTransactionOutput::BabbageFormatTxOut(_) => {
836 BabbageTransactionOutputKind::BabbageFormatTxOut
837 }
838 }
839 }
840
841 pub fn as_alonzo_format_tx_out(&self) -> Option<AlonzoFormatTxOut> {
842 match &self.0 {
843 cml_multi_era::babbage::BabbageTransactionOutput::AlonzoFormatTxOut(
844 alonzo_format_tx_out,
845 ) => Some(alonzo_format_tx_out.clone().into()),
846 _ => None,
847 }
848 }
849
850 pub fn as_babbage_format_tx_out(&self) -> Option<BabbageFormatTxOut> {
851 match &self.0 {
852 cml_multi_era::babbage::BabbageTransactionOutput::BabbageFormatTxOut(
853 babbage_format_tx_out,
854 ) => Some(babbage_format_tx_out.clone().into()),
855 _ => None,
856 }
857 }
858}
859
860#[wasm_bindgen]
861pub enum BabbageTransactionOutputKind {
862 AlonzoFormatTxOut,
863 BabbageFormatTxOut,
864}
865
866#[derive(Clone, Debug)]
867#[wasm_bindgen]
868pub struct BabbageTransactionWitnessSet(cml_multi_era::babbage::BabbageTransactionWitnessSet);
869
870impl_wasm_cbor_json_api!(BabbageTransactionWitnessSet);
871
872impl_wasm_conversions!(
873 cml_multi_era::babbage::BabbageTransactionWitnessSet,
874 BabbageTransactionWitnessSet
875);
876
877#[wasm_bindgen]
878impl BabbageTransactionWitnessSet {
879 pub fn set_vkeywitnesses(&mut self, vkeywitnesses: &VkeywitnessList) {
880 self.0.vkeywitnesses = Some(vkeywitnesses.clone().into())
881 }
882
883 pub fn vkeywitnesses(&self) -> Option<VkeywitnessList> {
884 self.0.vkeywitnesses.clone().map(std::convert::Into::into)
885 }
886
887 pub fn set_native_scripts(&mut self, native_scripts: &NativeScriptList) {
888 self.0.native_scripts = Some(native_scripts.clone().into())
889 }
890
891 pub fn native_scripts(&self) -> Option<NativeScriptList> {
892 self.0.native_scripts.clone().map(std::convert::Into::into)
893 }
894
895 pub fn set_bootstrap_witnesses(&mut self, bootstrap_witnesses: &BootstrapWitnessList) {
896 self.0.bootstrap_witnesses = Some(bootstrap_witnesses.clone().into())
897 }
898
899 pub fn bootstrap_witnesses(&self) -> Option<BootstrapWitnessList> {
900 self.0
901 .bootstrap_witnesses
902 .clone()
903 .map(std::convert::Into::into)
904 }
905
906 pub fn set_plutus_v1_scripts(&mut self, plutus_v1_scripts: &PlutusV1ScriptList) {
907 self.0.plutus_v1_scripts = Some(plutus_v1_scripts.clone().into())
908 }
909
910 pub fn plutus_v1_scripts(&self) -> Option<PlutusV1ScriptList> {
911 self.0
912 .plutus_v1_scripts
913 .clone()
914 .map(std::convert::Into::into)
915 }
916
917 pub fn set_plutus_datums(&mut self, plutus_datums: &PlutusDataList) {
918 self.0.plutus_datums = Some(plutus_datums.clone().into())
919 }
920
921 pub fn plutus_datums(&self) -> Option<PlutusDataList> {
922 self.0.plutus_datums.clone().map(std::convert::Into::into)
923 }
924
925 pub fn set_redeemers(&mut self, redeemers: &AlonzoRedeemerList) {
926 self.0.redeemers = Some(redeemers.clone().into())
927 }
928
929 pub fn redeemers(&self) -> Option<AlonzoRedeemerList> {
930 self.0.redeemers.clone().map(std::convert::Into::into)
931 }
932
933 pub fn set_plutus_v2_scripts(&mut self, plutus_v2_scripts: &PlutusV2ScriptList) {
934 self.0.plutus_v2_scripts = Some(plutus_v2_scripts.clone().into())
935 }
936
937 pub fn plutus_v2_scripts(&self) -> Option<PlutusV2ScriptList> {
938 self.0
939 .plutus_v2_scripts
940 .clone()
941 .map(std::convert::Into::into)
942 }
943
944 pub fn new() -> Self {
945 Self(cml_multi_era::babbage::BabbageTransactionWitnessSet::new())
946 }
947}
948
949#[derive(Clone, Debug)]
950#[wasm_bindgen]
951pub struct BabbageUpdate(cml_multi_era::babbage::BabbageUpdate);
952
953impl_wasm_cbor_json_api!(BabbageUpdate);
954
955impl_wasm_conversions!(cml_multi_era::babbage::BabbageUpdate, BabbageUpdate);
956
957#[wasm_bindgen]
958impl BabbageUpdate {
959 pub fn updates(&self) -> BabbageProposedProtocolParameterUpdates {
960 self.0.updates.clone().into()
961 }
962
963 pub fn epoch(&self) -> Epoch {
964 self.0.epoch
965 }
966
967 pub fn new(updates: &BabbageProposedProtocolParameterUpdates, epoch: Epoch) -> Self {
968 Self(cml_multi_era::babbage::BabbageUpdate::new(
969 updates.clone().into(),
970 epoch,
971 ))
972 }
973}