whisky/transaction/
inputs.rs1use 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}