whisky/transaction/
inputs.rs

1use crate::*;
2
3use crate::builder::{WData, WRedeemer};
4
5use super::WhiskyTx;
6
7pub struct TxInput {
8    pub utxo: UTxO,
9    pub datum: InputDatum,
10}
11
12pub enum InputDatum {
13    Hash(WData),
14    Inline,
15}
16
17impl WhiskyTx {
18    pub fn unlock_with_full_eval(
19        &mut self,
20        language_version: &LanguageVersion,
21        input: &[TxInput],
22        redeemer: &WRedeemer,
23        script_cbor: &str,
24        ref_script_input: Option<UTxO>,
25    ) -> Result<&mut Self, WError> {
26        for input in input.iter() {
27            let utxo = &input.utxo;
28            self.tx_builder
29                .spending_plutus_script(language_version)
30                .tx_in(
31                    &utxo.input.tx_hash,
32                    utxo.input.output_index,
33                    &utxo.output.amount,
34                    &utxo.output.address,
35                )
36                .tx_in_redeemer_value(redeemer);
37            match &input.datum {
38                InputDatum::Hash(datum) => {
39                    self.tx_builder.tx_in_datum_value(datum);
40                }
41                InputDatum::Inline => {
42                    self.tx_builder.tx_in_inline_datum_present();
43                }
44            }
45            match ref_script_input.clone() {
46                Some(ref_script_input) => {
47                    self.tx_builder
48                        .spending_tx_in_reference(
49                            &ref_script_input.input.tx_hash,
50                            ref_script_input.input.output_index,
51                            &get_script_hash(script_cbor, language_version.clone())?,
52                            script_cbor.len() / 2,
53                        )
54                        .input_for_evaluation(&ref_script_input);
55                }
56                None => {
57                    self.tx_builder.tx_in_script(script_cbor);
58                }
59            }
60            self.tx_builder.input_for_evaluation(utxo);
61        }
62        Ok(self)
63    }
64
65    pub fn add_collateral(&mut self, collateral: &UTxO) -> Result<&mut Self, WError> {
66        self.tx_builder.tx_in_collateral(
67            &collateral.input.tx_hash,
68            collateral.input.output_index,
69            &collateral.output.amount,
70            &collateral.output.address,
71        );
72        Ok(self)
73    }
74}