cardano_serialization_lib/builders/script_structs/
plutus_script_source.rs

1use crate::*;
2
3#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)]
4pub(crate) enum PlutusScriptSourceEnum {
5    Script(PlutusScript, Option<RequiredSigners>),
6    RefInput(PlutusScriptRef, Option<RequiredSigners>),
7}
8
9impl PlutusScriptSourceEnum {
10    pub fn script_hash(&self) -> ScriptHash {
11        match self {
12            PlutusScriptSourceEnum::Script(script, ..) => script.hash(),
13            PlutusScriptSourceEnum::RefInput(script_ref, ..) => script_ref.script_hash.clone()
14        }
15    }
16
17    pub fn language(&self) -> Language {
18        match self {
19            PlutusScriptSourceEnum::Script(script, ..) => script.language_version(),
20            PlutusScriptSourceEnum::RefInput(script_ref, ..) => script_ref.language.clone(),
21        }
22    }
23
24    pub(crate) fn get_required_signers(&self) -> Option<Ed25519KeyHashes> {
25        match self {
26            PlutusScriptSourceEnum::Script(_, signers) => signers.clone(),
27            PlutusScriptSourceEnum::RefInput(_, signers) => signers.clone(),
28        }
29    }
30}
31
32#[wasm_bindgen]
33#[derive(Clone, Debug, Eq, Ord, PartialEq, PartialOrd)]
34pub struct PlutusScriptSource(pub(crate) PlutusScriptSourceEnum);
35
36#[wasm_bindgen]
37impl PlutusScriptSource {
38    pub fn new(script: &PlutusScript) -> Self {
39        Self(PlutusScriptSourceEnum::Script(script.clone(), None))
40    }
41    pub fn new_ref_input(
42        script_hash: &ScriptHash,
43        input: &TransactionInput,
44        lang_ver: &Language,
45        script_size: usize,
46    ) -> Self {
47        Self(PlutusScriptSourceEnum::RefInput(
48            PlutusScriptRef::new(
49                input.clone(),
50                script_hash.clone(),
51                lang_ver.clone(),
52                script_size,
53            ),
54            None,
55        ))
56    }
57
58    pub fn set_required_signers(&mut self, key_hashes: &Ed25519KeyHashes) {
59        match &mut self.0 {
60            PlutusScriptSourceEnum::Script(_, signers) => {
61                *signers = Some(key_hashes.clone());
62            }
63            PlutusScriptSourceEnum::RefInput(_ , signers) => {
64                *signers = Some(key_hashes.clone());
65            }
66        }
67    }
68
69    pub fn get_ref_script_size(&self) -> Option<usize> {
70        match &self.0 {
71            PlutusScriptSourceEnum::Script(..) => None,
72            PlutusScriptSourceEnum::RefInput(script_ref, ..) => Some(script_ref.script_size)
73        }
74    }
75}