cml_chain_wasm/transaction/
mod.rs

1// This file was code-generated using an experimental CDDL to rust tool:
2// https://github.com/dcSpark/cddl-codegen
3
4use crate::address::Address;
5use crate::assets::{Coin, Mint, PositiveCoin, Value};
6use crate::auxdata::AuxiliaryData;
7use crate::governance::VotingProcedures;
8use crate::plutus::{PlutusData, Redeemers};
9use crate::{
10    NativeScriptList, NetworkId, NonemptySetBootstrapWitness, NonemptySetCertificate,
11    NonemptySetNativeScript, NonemptySetPlutusData, NonemptySetPlutusV1Script,
12    NonemptySetPlutusV2Script, NonemptySetPlutusV3Script, NonemptySetProposalProcedure,
13    NonemptySetTransactionInput, NonemptySetVkeywitness, RequiredSigners, Script,
14    SetTransactionInput, Slot, TransactionOutputList, Withdrawals,
15};
16use cml_core_wasm::{impl_wasm_cbor_json_api, impl_wasm_conversions};
17use cml_crypto_wasm::{
18    AuxiliaryDataHash, DatumHash, Ed25519KeyHash, ScriptDataHash, TransactionHash,
19};
20
21use wasm_bindgen::prelude::wasm_bindgen;
22
23pub mod utils;
24
25#[derive(Clone, Debug)]
26#[wasm_bindgen]
27pub struct AlonzoFormatTxOut(cml_chain::transaction::AlonzoFormatTxOut);
28
29impl_wasm_cbor_json_api!(AlonzoFormatTxOut);
30
31impl_wasm_conversions!(cml_chain::transaction::AlonzoFormatTxOut, AlonzoFormatTxOut);
32
33#[wasm_bindgen]
34impl AlonzoFormatTxOut {
35    pub fn address(&self) -> Address {
36        self.0.address.clone().into()
37    }
38
39    pub fn amount(&self) -> Value {
40        self.0.amount.clone().into()
41    }
42
43    pub fn set_datum_hash(&mut self, datum_hash: &DatumHash) {
44        self.0.datum_hash = Some(datum_hash.clone().into())
45    }
46
47    pub fn datum_hash(&self) -> Option<DatumHash> {
48        self.0.datum_hash.map(std::convert::Into::into)
49    }
50
51    pub fn new(address: &Address, amount: &Value) -> Self {
52        Self(cml_chain::transaction::AlonzoFormatTxOut::new(
53            address.clone().into(),
54            amount.clone().into(),
55        ))
56    }
57}
58
59#[derive(Clone, Debug)]
60#[wasm_bindgen]
61pub struct ConwayFormatTxOut(cml_chain::transaction::ConwayFormatTxOut);
62
63impl_wasm_cbor_json_api!(ConwayFormatTxOut);
64
65impl_wasm_conversions!(cml_chain::transaction::ConwayFormatTxOut, ConwayFormatTxOut);
66
67#[wasm_bindgen]
68impl ConwayFormatTxOut {
69    pub fn address(&self) -> Address {
70        self.0.address.clone().into()
71    }
72
73    pub fn amount(&self) -> Value {
74        self.0.amount.clone().into()
75    }
76
77    pub fn set_datum_option(&mut self, datum_option: &DatumOption) {
78        self.0.datum_option = Some(datum_option.clone().into())
79    }
80
81    pub fn datum_option(&self) -> Option<DatumOption> {
82        self.0.datum_option.clone().map(std::convert::Into::into)
83    }
84
85    pub fn set_script_reference(&mut self, script_reference: &ScriptRef) {
86        self.0.script_reference = Some(script_reference.clone().into())
87    }
88
89    pub fn script_reference(&self) -> Option<ScriptRef> {
90        self.0
91            .script_reference
92            .clone()
93            .map(std::convert::Into::into)
94    }
95
96    pub fn new(address: &Address, amount: &Value) -> Self {
97        Self(cml_chain::transaction::ConwayFormatTxOut::new(
98            address.clone().into(),
99            amount.clone().into(),
100        ))
101    }
102}
103
104#[derive(Clone, Debug)]
105#[wasm_bindgen]
106pub struct DatumOption(cml_chain::transaction::DatumOption);
107
108impl_wasm_cbor_json_api!(DatumOption);
109
110impl_wasm_conversions!(cml_chain::transaction::DatumOption, DatumOption);
111
112#[wasm_bindgen]
113impl DatumOption {
114    pub fn new_hash(datum_hash: &DatumHash) -> Self {
115        Self(cml_chain::transaction::DatumOption::new_hash(
116            datum_hash.clone().into(),
117        ))
118    }
119
120    pub fn new_datum(datum: &PlutusData) -> Self {
121        Self(cml_chain::transaction::DatumOption::new_datum(
122            datum.clone().into(),
123        ))
124    }
125
126    pub fn kind(&self) -> DatumOptionKind {
127        match &self.0 {
128            cml_chain::transaction::DatumOption::Hash { .. } => DatumOptionKind::Hash,
129            cml_chain::transaction::DatumOption::Datum { .. } => DatumOptionKind::Datum,
130        }
131    }
132
133    pub fn as_hash(&self) -> Option<DatumHash> {
134        match &self.0 {
135            cml_chain::transaction::DatumOption::Hash { datum_hash, .. } => {
136                Some((*datum_hash).into())
137            }
138            _ => None,
139        }
140    }
141
142    pub fn as_datum(&self) -> Option<PlutusData> {
143        match &self.0 {
144            cml_chain::transaction::DatumOption::Datum { datum, .. } => Some(datum.clone().into()),
145            _ => None,
146        }
147    }
148}
149
150#[wasm_bindgen]
151pub enum DatumOptionKind {
152    Hash,
153    Datum,
154}
155
156#[derive(Clone, Debug)]
157#[wasm_bindgen]
158pub struct NativeScript(cml_chain::transaction::NativeScript);
159
160impl_wasm_cbor_json_api!(NativeScript);
161
162impl_wasm_conversions!(cml_chain::transaction::NativeScript, NativeScript);
163
164#[wasm_bindgen]
165impl NativeScript {
166    pub fn new_script_pubkey(ed25519_key_hash: &Ed25519KeyHash) -> Self {
167        Self(cml_chain::transaction::NativeScript::new_script_pubkey(
168            ed25519_key_hash.clone().into(),
169        ))
170    }
171
172    pub fn new_script_all(native_scripts: &NativeScriptList) -> Self {
173        Self(cml_chain::transaction::NativeScript::new_script_all(
174            native_scripts.clone().into(),
175        ))
176    }
177
178    pub fn new_script_any(native_scripts: &NativeScriptList) -> Self {
179        Self(cml_chain::transaction::NativeScript::new_script_any(
180            native_scripts.clone().into(),
181        ))
182    }
183
184    pub fn new_script_n_of_k(n: u64, native_scripts: &NativeScriptList) -> Self {
185        Self(cml_chain::transaction::NativeScript::new_script_n_of_k(
186            n,
187            native_scripts.clone().into(),
188        ))
189    }
190
191    /// Timelock validity intervals are half-open intervals [a, b). This field specifies the left (included) endpoint a.
192    pub fn new_script_invalid_before(before: Slot) -> Self {
193        Self(cml_chain::transaction::NativeScript::new_script_invalid_before(before))
194    }
195
196    /// Timelock validity intervals are half-open intervals [a, b). This field specifies the right (excluded) endpoint b.
197    pub fn new_script_invalid_hereafter(after: Slot) -> Self {
198        Self(cml_chain::transaction::NativeScript::new_script_invalid_hereafter(after))
199    }
200
201    pub fn kind(&self) -> NativeScriptKind {
202        match &self.0 {
203            cml_chain::transaction::NativeScript::ScriptPubkey(_) => NativeScriptKind::ScriptPubkey,
204            cml_chain::transaction::NativeScript::ScriptAll(_) => NativeScriptKind::ScriptAll,
205            cml_chain::transaction::NativeScript::ScriptAny(_) => NativeScriptKind::ScriptAny,
206            cml_chain::transaction::NativeScript::ScriptNOfK(_) => NativeScriptKind::ScriptNOfK,
207            cml_chain::transaction::NativeScript::ScriptInvalidBefore(_) => {
208                NativeScriptKind::ScriptInvalidBefore
209            }
210            cml_chain::transaction::NativeScript::ScriptInvalidHereafter(_) => {
211                NativeScriptKind::ScriptInvalidHereafter
212            }
213        }
214    }
215
216    pub fn as_script_pubkey(&self) -> Option<ScriptPubkey> {
217        match &self.0 {
218            cml_chain::transaction::NativeScript::ScriptPubkey(script_pubkey) => {
219                Some(script_pubkey.clone().into())
220            }
221            _ => None,
222        }
223    }
224
225    pub fn as_script_all(&self) -> Option<ScriptAll> {
226        match &self.0 {
227            cml_chain::transaction::NativeScript::ScriptAll(script_all) => {
228                Some(script_all.clone().into())
229            }
230            _ => None,
231        }
232    }
233
234    pub fn as_script_any(&self) -> Option<ScriptAny> {
235        match &self.0 {
236            cml_chain::transaction::NativeScript::ScriptAny(script_any) => {
237                Some(script_any.clone().into())
238            }
239            _ => None,
240        }
241    }
242
243    pub fn as_script_n_of_k(&self) -> Option<ScriptNOfK> {
244        match &self.0 {
245            cml_chain::transaction::NativeScript::ScriptNOfK(script_n_of_k) => {
246                Some(script_n_of_k.clone().into())
247            }
248            _ => None,
249        }
250    }
251
252    pub fn as_script_invalid_before(&self) -> Option<ScriptInvalidBefore> {
253        match &self.0 {
254            cml_chain::transaction::NativeScript::ScriptInvalidBefore(script_invalid_before) => {
255                Some(script_invalid_before.clone().into())
256            }
257            _ => None,
258        }
259    }
260
261    pub fn as_script_invalid_hereafter(&self) -> Option<ScriptInvalidHereafter> {
262        match &self.0 {
263            cml_chain::transaction::NativeScript::ScriptInvalidHereafter(
264                script_invalid_hereafter,
265            ) => Some(script_invalid_hereafter.clone().into()),
266            _ => None,
267        }
268    }
269}
270
271#[wasm_bindgen]
272pub enum NativeScriptKind {
273    ScriptPubkey,
274    ScriptAll,
275    ScriptAny,
276    ScriptNOfK,
277    ScriptInvalidBefore,
278    ScriptInvalidHereafter,
279}
280
281#[derive(Clone, Debug)]
282#[wasm_bindgen]
283pub struct ScriptAll(cml_chain::transaction::ScriptAll);
284
285impl_wasm_cbor_json_api!(ScriptAll);
286
287impl_wasm_conversions!(cml_chain::transaction::ScriptAll, ScriptAll);
288
289#[wasm_bindgen]
290impl ScriptAll {
291    pub fn native_scripts(&self) -> NativeScriptList {
292        self.0.native_scripts.clone().into()
293    }
294
295    pub fn new(native_scripts: &NativeScriptList) -> Self {
296        Self(cml_chain::transaction::ScriptAll::new(
297            native_scripts.clone().into(),
298        ))
299    }
300}
301
302#[derive(Clone, Debug)]
303#[wasm_bindgen]
304pub struct ScriptAny(cml_chain::transaction::ScriptAny);
305
306impl_wasm_cbor_json_api!(ScriptAny);
307
308impl_wasm_conversions!(cml_chain::transaction::ScriptAny, ScriptAny);
309
310#[wasm_bindgen]
311impl ScriptAny {
312    pub fn native_scripts(&self) -> NativeScriptList {
313        self.0.native_scripts.clone().into()
314    }
315
316    pub fn new(native_scripts: &NativeScriptList) -> Self {
317        Self(cml_chain::transaction::ScriptAny::new(
318            native_scripts.clone().into(),
319        ))
320    }
321}
322
323#[derive(Clone, Debug)]
324#[wasm_bindgen]
325pub struct ScriptInvalidBefore(cml_chain::transaction::ScriptInvalidBefore);
326
327impl_wasm_cbor_json_api!(ScriptInvalidBefore);
328
329impl_wasm_conversions!(
330    cml_chain::transaction::ScriptInvalidBefore,
331    ScriptInvalidBefore
332);
333
334#[wasm_bindgen]
335impl ScriptInvalidBefore {
336    pub fn before(&self) -> Slot {
337        self.0.before
338    }
339
340    pub fn new(before: Slot) -> Self {
341        Self(cml_chain::transaction::ScriptInvalidBefore::new(before))
342    }
343}
344
345#[derive(Clone, Debug)]
346#[wasm_bindgen]
347pub struct ScriptInvalidHereafter(cml_chain::transaction::ScriptInvalidHereafter);
348
349impl_wasm_cbor_json_api!(ScriptInvalidHereafter);
350
351impl_wasm_conversions!(
352    cml_chain::transaction::ScriptInvalidHereafter,
353    ScriptInvalidHereafter
354);
355
356#[wasm_bindgen]
357impl ScriptInvalidHereafter {
358    pub fn after(&self) -> Slot {
359        self.0.after
360    }
361
362    pub fn new(after: Slot) -> Self {
363        Self(cml_chain::transaction::ScriptInvalidHereafter::new(after))
364    }
365}
366
367#[derive(Clone, Debug)]
368#[wasm_bindgen]
369pub struct ScriptNOfK(cml_chain::transaction::ScriptNOfK);
370
371impl_wasm_cbor_json_api!(ScriptNOfK);
372
373impl_wasm_conversions!(cml_chain::transaction::ScriptNOfK, ScriptNOfK);
374
375#[wasm_bindgen]
376impl ScriptNOfK {
377    pub fn n(&self) -> u64 {
378        self.0.n
379    }
380
381    pub fn native_scripts(&self) -> NativeScriptList {
382        self.0.native_scripts.clone().into()
383    }
384
385    pub fn new(n: u64, native_scripts: &NativeScriptList) -> Self {
386        Self(cml_chain::transaction::ScriptNOfK::new(
387            n,
388            native_scripts.clone().into(),
389        ))
390    }
391}
392
393#[derive(Clone, Debug)]
394#[wasm_bindgen]
395pub struct ScriptPubkey(cml_chain::transaction::ScriptPubkey);
396
397impl_wasm_cbor_json_api!(ScriptPubkey);
398
399impl_wasm_conversions!(cml_chain::transaction::ScriptPubkey, ScriptPubkey);
400
401#[wasm_bindgen]
402impl ScriptPubkey {
403    pub fn ed25519_key_hash(&self) -> Ed25519KeyHash {
404        self.0.ed25519_key_hash.into()
405    }
406
407    pub fn new(ed25519_key_hash: &Ed25519KeyHash) -> Self {
408        Self(cml_chain::transaction::ScriptPubkey::new(
409            ed25519_key_hash.clone().into(),
410        ))
411    }
412}
413
414pub type ScriptRef = Script;
415
416#[derive(Clone, Debug)]
417#[wasm_bindgen]
418pub struct Transaction(cml_chain::transaction::Transaction);
419
420impl_wasm_cbor_json_api!(Transaction);
421
422impl_wasm_conversions!(cml_chain::transaction::Transaction, Transaction);
423
424#[wasm_bindgen]
425impl Transaction {
426    pub fn body(&self) -> TransactionBody {
427        self.0.body.clone().into()
428    }
429
430    pub fn witness_set(&self) -> TransactionWitnessSet {
431        self.0.witness_set.clone().into()
432    }
433
434    pub fn is_valid(&self) -> bool {
435        self.0.is_valid
436    }
437
438    pub fn auxiliary_data(&self) -> Option<AuxiliaryData> {
439        self.0.auxiliary_data.clone().map(std::convert::Into::into)
440    }
441
442    pub fn new(
443        body: &TransactionBody,
444        witness_set: &TransactionWitnessSet,
445        is_valid: bool,
446        auxiliary_data: Option<AuxiliaryData>,
447    ) -> Self {
448        Self(cml_chain::transaction::Transaction::new(
449            body.clone().into(),
450            witness_set.clone().into(),
451            is_valid,
452            auxiliary_data.map(Into::into),
453        ))
454    }
455}
456
457#[derive(Clone, Debug)]
458#[wasm_bindgen]
459pub struct TransactionBody(cml_chain::transaction::TransactionBody);
460
461impl_wasm_cbor_json_api!(TransactionBody);
462
463impl_wasm_conversions!(cml_chain::transaction::TransactionBody, TransactionBody);
464
465#[wasm_bindgen]
466impl TransactionBody {
467    pub fn inputs(&self) -> SetTransactionInput {
468        self.0.inputs.clone().into()
469    }
470
471    pub fn outputs(&self) -> TransactionOutputList {
472        self.0.outputs.clone().into()
473    }
474
475    pub fn fee(&self) -> Coin {
476        self.0.fee
477    }
478
479    pub fn set_ttl(&mut self, ttl: u64) {
480        self.0.ttl = Some(ttl)
481    }
482
483    pub fn ttl(&self) -> Option<u64> {
484        self.0.ttl
485    }
486
487    pub fn set_certs(&mut self, certs: &NonemptySetCertificate) {
488        self.0.certs = Some(certs.clone().into())
489    }
490
491    pub fn certs(&self) -> Option<NonemptySetCertificate> {
492        self.0.certs.clone().map(std::convert::Into::into)
493    }
494
495    pub fn set_withdrawals(&mut self, withdrawals: &Withdrawals) {
496        self.0.withdrawals = Some(withdrawals.clone().into())
497    }
498
499    pub fn withdrawals(&self) -> Option<Withdrawals> {
500        self.0.withdrawals.clone().map(std::convert::Into::into)
501    }
502
503    pub fn set_auxiliary_data_hash(&mut self, auxiliary_data_hash: &AuxiliaryDataHash) {
504        self.0.auxiliary_data_hash = Some(auxiliary_data_hash.clone().into())
505    }
506
507    pub fn auxiliary_data_hash(&self) -> Option<AuxiliaryDataHash> {
508        self.0.auxiliary_data_hash.map(std::convert::Into::into)
509    }
510
511    pub fn set_validity_interval_start(&mut self, validity_interval_start: u64) {
512        self.0.validity_interval_start = Some(validity_interval_start)
513    }
514
515    pub fn validity_interval_start(&self) -> Option<u64> {
516        self.0.validity_interval_start
517    }
518
519    pub fn set_mint(&mut self, mint: &Mint) {
520        self.0.mint = Some(mint.clone().into())
521    }
522
523    pub fn mint(&self) -> Option<Mint> {
524        self.0.mint.clone().map(std::convert::Into::into)
525    }
526
527    pub fn set_script_data_hash(&mut self, script_data_hash: &ScriptDataHash) {
528        self.0.script_data_hash = Some(script_data_hash.clone().into())
529    }
530
531    pub fn script_data_hash(&self) -> Option<ScriptDataHash> {
532        self.0.script_data_hash.map(std::convert::Into::into)
533    }
534
535    pub fn set_collateral_inputs(&mut self, collateral_inputs: &NonemptySetTransactionInput) {
536        self.0.collateral_inputs = Some(collateral_inputs.clone().into())
537    }
538
539    pub fn collateral_inputs(&self) -> Option<NonemptySetTransactionInput> {
540        self.0
541            .collateral_inputs
542            .clone()
543            .map(std::convert::Into::into)
544    }
545
546    pub fn set_required_signers(&mut self, required_signers: &RequiredSigners) {
547        self.0.required_signers = Some(required_signers.clone().into())
548    }
549
550    pub fn required_signers(&self) -> Option<RequiredSigners> {
551        self.0
552            .required_signers
553            .clone()
554            .map(std::convert::Into::into)
555    }
556
557    pub fn set_network_id(&mut self, network_id: &NetworkId) {
558        self.0.network_id = Some(network_id.clone().into())
559    }
560
561    pub fn network_id(&self) -> Option<NetworkId> {
562        self.0.network_id.map(std::convert::Into::into)
563    }
564
565    pub fn set_collateral_return(&mut self, collateral_return: &TransactionOutput) {
566        self.0.collateral_return = Some(collateral_return.clone().into())
567    }
568
569    pub fn collateral_return(&self) -> Option<TransactionOutput> {
570        self.0
571            .collateral_return
572            .clone()
573            .map(std::convert::Into::into)
574    }
575
576    pub fn set_total_collateral(&mut self, total_collateral: Coin) {
577        self.0.total_collateral = Some(total_collateral)
578    }
579
580    pub fn total_collateral(&self) -> Option<Coin> {
581        self.0.total_collateral
582    }
583
584    pub fn set_reference_inputs(&mut self, reference_inputs: &NonemptySetTransactionInput) {
585        self.0.reference_inputs = Some(reference_inputs.clone().into())
586    }
587
588    pub fn reference_inputs(&self) -> Option<NonemptySetTransactionInput> {
589        self.0
590            .reference_inputs
591            .clone()
592            .map(std::convert::Into::into)
593    }
594
595    pub fn set_voting_procedures(&mut self, voting_procedures: &VotingProcedures) {
596        self.0.voting_procedures = Some(voting_procedures.clone().into())
597    }
598
599    pub fn voting_procedures(&self) -> Option<VotingProcedures> {
600        self.0
601            .voting_procedures
602            .clone()
603            .map(std::convert::Into::into)
604    }
605
606    pub fn set_proposal_procedures(&mut self, proposal_procedures: &NonemptySetProposalProcedure) {
607        self.0.proposal_procedures = Some(proposal_procedures.clone().into())
608    }
609
610    pub fn proposal_procedures(&self) -> Option<NonemptySetProposalProcedure> {
611        self.0
612            .proposal_procedures
613            .clone()
614            .map(std::convert::Into::into)
615    }
616
617    pub fn set_current_treasury_value(&mut self, current_treasury_value: Coin) {
618        self.0.current_treasury_value = Some(current_treasury_value)
619    }
620
621    pub fn current_treasury_value(&self) -> Option<Coin> {
622        self.0.current_treasury_value
623    }
624
625    pub fn set_donation(&mut self, donation: PositiveCoin) {
626        self.0.donation = Some(donation)
627    }
628
629    pub fn donation(&self) -> Option<PositiveCoin> {
630        self.0.donation
631    }
632
633    pub fn new(inputs: &SetTransactionInput, outputs: &TransactionOutputList, fee: Coin) -> Self {
634        Self(cml_chain::transaction::TransactionBody::new(
635            inputs.clone().into(),
636            outputs.clone().into(),
637            fee,
638        ))
639    }
640}
641
642#[derive(Clone, Debug)]
643#[wasm_bindgen]
644pub struct TransactionInput(cml_chain::transaction::TransactionInput);
645
646impl_wasm_cbor_json_api!(TransactionInput);
647
648impl_wasm_conversions!(cml_chain::transaction::TransactionInput, TransactionInput);
649
650#[wasm_bindgen]
651impl TransactionInput {
652    pub fn transaction_id(&self) -> TransactionHash {
653        self.0.transaction_id.into()
654    }
655
656    pub fn index(&self) -> u64 {
657        self.0.index
658    }
659
660    pub fn new(transaction_id: &TransactionHash, index: u64) -> Self {
661        Self(cml_chain::transaction::TransactionInput::new(
662            transaction_id.clone().into(),
663            index,
664        ))
665    }
666}
667
668#[derive(Clone, Debug)]
669#[wasm_bindgen]
670pub struct TransactionOutput(cml_chain::transaction::TransactionOutput);
671
672impl_wasm_cbor_json_api!(TransactionOutput);
673
674impl_wasm_conversions!(cml_chain::transaction::TransactionOutput, TransactionOutput);
675
676#[wasm_bindgen]
677impl TransactionOutput {
678    pub fn new_alonzo_format_tx_out(alonzo_format_tx_out: &AlonzoFormatTxOut) -> Self {
679        Self(
680            cml_chain::transaction::TransactionOutput::new_alonzo_format_tx_out(
681                alonzo_format_tx_out.clone().into(),
682            ),
683        )
684    }
685
686    pub fn new_conway_format_tx_out(conway_format_tx_out: &ConwayFormatTxOut) -> Self {
687        Self(
688            cml_chain::transaction::TransactionOutput::new_conway_format_tx_out(
689                conway_format_tx_out.clone().into(),
690            ),
691        )
692    }
693
694    pub fn kind(&self) -> TransactionOutputKind {
695        match &self.0 {
696            cml_chain::transaction::TransactionOutput::AlonzoFormatTxOut(_) => {
697                TransactionOutputKind::AlonzoFormatTxOut
698            }
699            cml_chain::transaction::TransactionOutput::ConwayFormatTxOut(_) => {
700                TransactionOutputKind::ConwayFormatTxOut
701            }
702        }
703    }
704
705    pub fn as_alonzo_format_tx_out(&self) -> Option<AlonzoFormatTxOut> {
706        match &self.0 {
707            cml_chain::transaction::TransactionOutput::AlonzoFormatTxOut(alonzo_format_tx_out) => {
708                Some(alonzo_format_tx_out.clone().into())
709            }
710            _ => None,
711        }
712    }
713
714    pub fn as_conway_format_tx_out(&self) -> Option<ConwayFormatTxOut> {
715        match &self.0 {
716            cml_chain::transaction::TransactionOutput::ConwayFormatTxOut(conway_format_tx_out) => {
717                Some(conway_format_tx_out.clone().into())
718            }
719            _ => None,
720        }
721    }
722}
723
724#[wasm_bindgen]
725pub enum TransactionOutputKind {
726    AlonzoFormatTxOut,
727    ConwayFormatTxOut,
728}
729
730#[derive(Clone, Debug)]
731#[wasm_bindgen]
732pub struct TransactionWitnessSet(cml_chain::transaction::TransactionWitnessSet);
733
734impl_wasm_cbor_json_api!(TransactionWitnessSet);
735
736impl_wasm_conversions!(
737    cml_chain::transaction::TransactionWitnessSet,
738    TransactionWitnessSet
739);
740
741#[wasm_bindgen]
742impl TransactionWitnessSet {
743    pub fn set_vkeywitnesses(&mut self, vkeywitnesses: &NonemptySetVkeywitness) {
744        self.0.vkeywitnesses = Some(vkeywitnesses.clone().into())
745    }
746
747    pub fn vkeywitnesses(&self) -> Option<NonemptySetVkeywitness> {
748        self.0.vkeywitnesses.clone().map(std::convert::Into::into)
749    }
750
751    pub fn set_native_scripts(&mut self, native_scripts: &NonemptySetNativeScript) {
752        self.0.native_scripts = Some(native_scripts.clone().into())
753    }
754
755    pub fn native_scripts(&self) -> Option<NonemptySetNativeScript> {
756        self.0.native_scripts.clone().map(std::convert::Into::into)
757    }
758
759    pub fn set_bootstrap_witnesses(&mut self, bootstrap_witnesses: &NonemptySetBootstrapWitness) {
760        self.0.bootstrap_witnesses = Some(bootstrap_witnesses.clone().into())
761    }
762
763    pub fn bootstrap_witnesses(&self) -> Option<NonemptySetBootstrapWitness> {
764        self.0
765            .bootstrap_witnesses
766            .clone()
767            .map(std::convert::Into::into)
768    }
769
770    pub fn set_plutus_v1_scripts(&mut self, plutus_v1_scripts: &NonemptySetPlutusV1Script) {
771        self.0.plutus_v1_scripts = Some(plutus_v1_scripts.clone().into())
772    }
773
774    pub fn plutus_v1_scripts(&self) -> Option<NonemptySetPlutusV1Script> {
775        self.0
776            .plutus_v1_scripts
777            .clone()
778            .map(std::convert::Into::into)
779    }
780
781    pub fn set_plutus_datums(&mut self, plutus_datums: &NonemptySetPlutusData) {
782        self.0.plutus_datums = Some(plutus_datums.clone().into())
783    }
784
785    pub fn plutus_datums(&self) -> Option<NonemptySetPlutusData> {
786        self.0.plutus_datums.clone().map(std::convert::Into::into)
787    }
788
789    pub fn set_redeemers(&mut self, redeemers: &Redeemers) {
790        self.0.redeemers = Some(redeemers.clone().into())
791    }
792
793    pub fn redeemers(&self) -> Option<Redeemers> {
794        self.0.redeemers.clone().map(std::convert::Into::into)
795    }
796
797    pub fn set_plutus_v2_scripts(&mut self, plutus_v2_scripts: &NonemptySetPlutusV2Script) {
798        self.0.plutus_v2_scripts = Some(plutus_v2_scripts.clone().into())
799    }
800
801    pub fn plutus_v2_scripts(&self) -> Option<NonemptySetPlutusV2Script> {
802        self.0
803            .plutus_v2_scripts
804            .clone()
805            .map(std::convert::Into::into)
806    }
807
808    pub fn set_plutus_v3_scripts(&mut self, plutus_v3_scripts: &NonemptySetPlutusV3Script) {
809        self.0.plutus_v3_scripts = Some(plutus_v3_scripts.clone().into())
810    }
811
812    pub fn plutus_v3_scripts(&self) -> Option<NonemptySetPlutusV3Script> {
813        self.0
814            .plutus_v3_scripts
815            .clone()
816            .map(std::convert::Into::into)
817    }
818
819    pub fn new() -> Self {
820        Self(cml_chain::transaction::TransactionWitnessSet::new())
821    }
822}