whisky_csl/utils/
script.rs
1use cardano_serialization_lib::{self as csl};
2use whisky_common::*;
3
4pub fn get_native_script_hash(script: &str) -> Result<String, WError> {
5 let script_hash = csl::NativeScript::from_hex(script)
6 .map_err(WError::from_err(
7 "get_native_script_hash - invalid native script hex",
8 ))?
9 .hash()
10 .to_hex();
11 Ok(script_hash)
12}
13
14pub fn get_script_hash(script: &str, version: LanguageVersion) -> Result<String, WError> {
15 let language_version = match version {
16 LanguageVersion::V1 => csl::Language::new_plutus_v1(),
17 LanguageVersion::V2 => csl::Language::new_plutus_v2(),
18 LanguageVersion::V3 => csl::Language::new_plutus_v3(),
19 };
20 let script_hash = csl::PlutusScript::from_hex_with_version(script, &language_version)
21 .map_err(WError::from_err("get_script_hash - invalid script hex"))?
22 .hash()
23 .to_hex();
24 Ok(script_hash)
25}
26
27pub fn to_csl_script_source(
28 script_source: ScriptSource,
29) -> Result<csl::PlutusScriptSource, WError> {
30 match script_source {
31 ScriptSource::InlineScriptSource(script) => {
32 let language_version: csl::Language = match script.language_version {
33 LanguageVersion::V1 => csl::Language::new_plutus_v1(),
34 LanguageVersion::V2 => csl::Language::new_plutus_v2(),
35 LanguageVersion::V3 => csl::Language::new_plutus_v3(),
36 };
37 Ok(csl::PlutusScriptSource::new_ref_input(
38 &csl::ScriptHash::from_hex(&script.script_hash).map_err(WError::from_err(
39 "to_csl_script_source - invalid script hash",
40 ))?,
41 &csl::TransactionInput::new(
42 &csl::TransactionHash::from_hex(&script.ref_tx_in.tx_hash).map_err(
43 WError::from_err("to_csl_script_source - invalid transaction hash"),
44 )?,
45 script.ref_tx_in.tx_index,
46 ),
47 &language_version,
48 script.script_size,
49 ))
50 }
51 ScriptSource::ProvidedScriptSource(script) => {
52 let language_version: csl::Language = match script.language_version {
53 LanguageVersion::V1 => csl::Language::new_plutus_v1(),
54 LanguageVersion::V2 => csl::Language::new_plutus_v2(),
55 LanguageVersion::V3 => csl::Language::new_plutus_v3(),
56 };
57 Ok(csl::PlutusScriptSource::new(
58 &csl::PlutusScript::from_hex_with_version(
59 script.script_cbor.as_str(),
60 &language_version,
61 )
62 .map_err(WError::from_err(
63 "to_csl_script_source - invalid script cbor",
64 ))?,
65 ))
66 }
67 }
68}
69
70pub fn to_csl_simple_script_source(
71 simple_script_source: SimpleScriptSource,
72) -> Result<csl::NativeScriptSource, WError> {
73 match simple_script_source {
74 SimpleScriptSource::ProvidedSimpleScriptSource(script) => Ok(csl::NativeScriptSource::new(
75 &csl::NativeScript::from_hex(&script.script_cbor).map_err(WError::from_err(
76 "to_csl_simple_script_source - invalid script cbor",
77 ))?,
78 )),
79
80 SimpleScriptSource::InlineSimpleScriptSource(script) => {
81 Ok(csl::NativeScriptSource::new_ref_input(
82 &csl::ScriptHash::from_hex(&script.simple_script_hash).map_err(
83 WError::from_err("to_csl_simple_script_source - invalid script hash"),
84 )?,
85 &csl::TransactionInput::new(
86 &csl::TransactionHash::from_hex(&script.ref_tx_in.tx_hash).map_err(
87 WError::from_err("to_csl_simple_script_source - invalid transaction hash"),
88 )?,
89 script.ref_tx_in.tx_index,
90 ),
91 script.script_size,
92 ))
93 }
94 }
95}