whisky_pallas/converter/tx_builder_body/
output.rs1use crate::converter::{bytes_from_bech32, convert_value};
2use whisky_common::{LanguageVersion, Output, WError};
3
4use crate::wrapper::transaction_body::{
5 Datum, DatumKind, ScriptRef, ScriptRefKind, TransactionOutput,
6};
7
8pub fn convert_output(output: &Output) -> Result<TransactionOutput, WError> {
9 let datum: Option<Datum> = match &output.datum {
10 Some(datum_source) => match datum_source {
11 whisky_common::Datum::Inline(datum_str) => Some(Datum::new(DatumKind::Data {
12 plutus_data_hex: datum_str.to_string(),
13 })?),
14 whisky_common::Datum::Hash(datum_str) => {
15 let datum = Datum::new(DatumKind::Data {
16 plutus_data_hex: datum_str.to_string(),
17 })?;
18
19 let datum_hash_str = datum.hash()?;
20 Some(Datum::new(DatumKind::Hash {
21 datum_hash: datum_hash_str,
22 })?)
23 }
24 whisky_common::Datum::Embedded(datum_str) => None,
25 },
26 None => None,
27 };
28
29 let script_ref = match &output.reference_script {
30 Some(script_source) => match script_source {
31 whisky_common::OutputScriptSource::ProvidedScriptSource(provided_script_source) => {
32 let plutus_script = match provided_script_source.language_version {
33 LanguageVersion::V1 => ScriptRef::new(ScriptRefKind::PlutusV1Script {
34 plutus_v1_script_hex: provided_script_source.script_cbor.clone(),
35 })?,
36 LanguageVersion::V2 => ScriptRef::new(ScriptRefKind::PlutusV2Script {
37 plutus_v2_script_hex: provided_script_source.script_cbor.clone(),
38 })?,
39 LanguageVersion::V3 => ScriptRef::new(ScriptRefKind::PlutusV3Script {
40 plutus_v3_script_hex: provided_script_source.script_cbor.clone(),
41 })?,
42 };
43 Some(plutus_script)
44 }
45 whisky_common::OutputScriptSource::ProvidedSimpleScriptSource(
46 provided_simple_script_source,
47 ) => {
48 let native_script = ScriptRef::new(ScriptRefKind::NativeScript {
49 native_script_hex: provided_simple_script_source.script_cbor.clone(),
50 })?;
51 Some(native_script)
52 }
53 },
54 None => None,
55 };
56
57 let tx_output = TransactionOutput::new(
58 &bytes_from_bech32(&output.address)?,
59 convert_value(&output.amount.clone())?,
60 datum,
61 script_ref,
62 )?;
63
64 Ok(tx_output)
65}