cardano_serialization_lib/builders/script_structs/
plutus_witness.rs

1use crate::*;
2
3#[wasm_bindgen]
4#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)]
5pub struct PlutusWitness {
6    pub(crate) script: PlutusScriptSourceEnum,
7    pub(crate) datum: Option<DatumSourceEnum>,
8    pub(crate) redeemer: Redeemer,
9}
10
11#[wasm_bindgen]
12impl PlutusWitness {
13    pub fn new(script: &PlutusScript, datum: &PlutusData, redeemer: &Redeemer) -> Self {
14        Self {
15            script: PlutusScriptSourceEnum::Script(script.clone(), None),
16            datum: Some(DatumSourceEnum::Datum(datum.clone())),
17            redeemer: redeemer.clone(),
18        }
19    }
20
21    pub fn new_with_ref(
22        script: &PlutusScriptSource,
23        datum: &DatumSource,
24        redeemer: &Redeemer,
25    ) -> Self {
26        Self {
27            script: script.0.clone(),
28            datum: Some(datum.0.clone()),
29            redeemer: redeemer.clone(),
30        }
31    }
32
33    pub fn new_without_datum(script: &PlutusScript, redeemer: &Redeemer) -> Self {
34        Self {
35            script: PlutusScriptSourceEnum::Script(script.clone(), None),
36            datum: None,
37            redeemer: redeemer.clone(),
38        }
39    }
40
41    pub fn new_with_ref_without_datum(script: &PlutusScriptSource, redeemer: &Redeemer) -> Self {
42        Self {
43            script: script.0.clone(),
44            datum: None,
45            redeemer: redeemer.clone(),
46        }
47    }
48
49    pub fn script(&self) -> Option<PlutusScript> {
50        match &self.script {
51            PlutusScriptSourceEnum::Script(script, _) => Some(script.clone()),
52            _ => None,
53        }
54    }
55
56    pub fn datum(&self) -> Option<PlutusData> {
57        match &self.datum {
58            Some(DatumSourceEnum::Datum(datum)) => Some(datum.clone()),
59            _ => None,
60        }
61    }
62
63    pub fn redeemer(&self) -> Redeemer {
64        self.redeemer.clone()
65    }
66
67    pub(crate) fn clone_with_redeemer_index_and_tag(
68        &self,
69        index: &BigNum,
70        tag: &RedeemerTag,
71    ) -> Self {
72        Self {
73            script: self.script.clone(),
74            datum: self.datum.clone(),
75            redeemer: self.redeemer.clone_with_index_and_tag(index, tag),
76        }
77    }
78
79    pub(crate) fn get_required_signers(&self) -> Option<Ed25519KeyHashes> {
80        self.script.get_required_signers()
81    }
82}