whisky-csl 1.0.13

Wrapper around the cardano-serialization-lib for easier transaction building, heavily inspired by cardano-cli APIs
Documentation
use cardano_serialization_lib::{self as csl};
use whisky_common::*;

pub fn get_native_script_hash(script: &str) -> Result<String, WError> {
    let script_hash = csl::NativeScript::from_hex(script)
        .map_err(WError::from_err(
            "get_native_script_hash - invalid native script hex",
        ))?
        .hash()
        .to_hex();
    Ok(script_hash)
}

pub fn get_script_hash(script: &str, version: LanguageVersion) -> Result<String, WError> {
    let language_version = match version {
        LanguageVersion::V1 => csl::Language::new_plutus_v1(),
        LanguageVersion::V2 => csl::Language::new_plutus_v2(),
        LanguageVersion::V3 => csl::Language::new_plutus_v3(),
    };
    let script_hash = csl::PlutusScript::from_hex_with_version(script, &language_version)
        .map_err(WError::from_err("get_script_hash - invalid script hex"))?
        .hash()
        .to_hex();
    Ok(script_hash)
}

pub fn to_csl_script_source(
    script_source: ScriptSource,
) -> Result<csl::PlutusScriptSource, WError> {
    match script_source {
        ScriptSource::InlineScriptSource(script) => {
            let language_version: csl::Language = match script.language_version {
                LanguageVersion::V1 => csl::Language::new_plutus_v1(),
                LanguageVersion::V2 => csl::Language::new_plutus_v2(),
                LanguageVersion::V3 => csl::Language::new_plutus_v3(),
            };
            Ok(csl::PlutusScriptSource::new_ref_input(
                &csl::ScriptHash::from_hex(&script.script_hash).map_err(WError::from_err(
                    "to_csl_script_source - invalid script hash",
                ))?,
                &csl::TransactionInput::new(
                    &csl::TransactionHash::from_hex(&script.ref_tx_in.tx_hash).map_err(
                        WError::from_err("to_csl_script_source - invalid transaction hash"),
                    )?,
                    script.ref_tx_in.tx_index,
                ),
                &language_version,
                script.script_size,
            ))
        }
        ScriptSource::ProvidedScriptSource(script) => {
            let language_version: csl::Language = match script.language_version {
                LanguageVersion::V1 => csl::Language::new_plutus_v1(),
                LanguageVersion::V2 => csl::Language::new_plutus_v2(),
                LanguageVersion::V3 => csl::Language::new_plutus_v3(),
            };
            Ok(csl::PlutusScriptSource::new(
                &csl::PlutusScript::from_hex_with_version(
                    script.script_cbor.as_str(),
                    &language_version,
                )
                .map_err(WError::from_err(
                    "to_csl_script_source - invalid script cbor",
                ))?,
            ))
        }
    }
}

pub fn to_csl_simple_script_source(
    simple_script_source: SimpleScriptSource,
) -> Result<csl::NativeScriptSource, WError> {
    match simple_script_source {
        SimpleScriptSource::ProvidedSimpleScriptSource(script) => Ok(csl::NativeScriptSource::new(
            &csl::NativeScript::from_hex(&script.script_cbor).map_err(WError::from_err(
                "to_csl_simple_script_source - invalid script cbor",
            ))?,
        )),

        SimpleScriptSource::InlineSimpleScriptSource(script) => {
            Ok(csl::NativeScriptSource::new_ref_input(
                &csl::ScriptHash::from_hex(&script.simple_script_hash).map_err(
                    WError::from_err("to_csl_simple_script_source - invalid script hash"),
                )?,
                &csl::TransactionInput::new(
                    &csl::TransactionHash::from_hex(&script.ref_tx_in.tx_hash).map_err(
                        WError::from_err("to_csl_simple_script_source - invalid transaction hash"),
                    )?,
                    script.ref_tx_in.tx_index,
                ),
                script.script_size,
            ))
        }
    }
}