cml_chain_wasm/transaction/
mod.rs1use 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 pub fn new_script_invalid_before(before: Slot) -> Self {
193 Self(cml_chain::transaction::NativeScript::new_script_invalid_before(before))
194 }
195
196 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}