Skip to main content

smplx_sdk/transaction/
partial_input.rs

1use simplicityhl::elements::confidential::{Asset, Value};
2use simplicityhl::elements::pset::Input;
3use simplicityhl::elements::{AssetId, OutPoint, Sequence, TxOut, Txid};
4
5use crate::program::ProgramTrait;
6use crate::program::WitnessTrait;
7
8#[derive(Clone)]
9pub enum RequiredSignature {
10    None,
11    NativeEcdsa,
12    Witness(String),
13}
14
15#[derive(Clone)]
16pub struct PartialInput {
17    pub witness_txid: Txid,
18    pub witness_output_index: u32,
19    pub witness_utxo: TxOut,
20    pub sequence: Sequence,
21    pub amount: Option<u64>,
22    pub asset: Option<AssetId>,
23}
24
25#[derive(Clone)]
26pub struct ProgramInput {
27    pub program: Box<dyn ProgramTrait>,
28    pub witness: Box<dyn WitnessTrait>,
29}
30
31#[derive(Clone)]
32pub struct IssuanceInput {
33    pub issuance_amount: u64,
34    pub asset_entropy: [u8; 32],
35}
36
37impl PartialInput {
38    pub fn new(outpoint: OutPoint, txout: TxOut) -> Self {
39        Self::new_sequence(outpoint, txout, Default::default())
40    }
41
42    pub fn new_sequence(outpoint: OutPoint, txout: TxOut, sequence: Sequence) -> Self {
43        let amount = match txout.value {
44            Value::Explicit(value) => Some(value),
45            _ => None,
46        };
47        let asset = match txout.asset {
48            Asset::Explicit(asset) => Some(asset),
49            _ => None,
50        };
51
52        Self {
53            witness_txid: outpoint.txid,
54            witness_output_index: outpoint.vout,
55            witness_utxo: txout,
56            sequence: sequence,
57            amount: amount,
58            asset: asset,
59        }
60    }
61
62    pub fn outpoint(&self) -> OutPoint {
63        OutPoint {
64            txid: self.witness_txid.clone(),
65            vout: self.witness_output_index,
66        }
67    }
68
69    pub fn input(&self) -> Input {
70        let mut input = Input::default();
71
72        input.previous_txid = self.witness_txid.clone();
73        input.previous_output_index = self.witness_output_index;
74        input.witness_utxo = Some(self.witness_utxo.clone());
75        input.sequence = Some(self.sequence.clone());
76        input.amount = self.amount.clone();
77        input.asset = self.asset.clone();
78
79        input
80    }
81}
82
83impl ProgramInput {
84    pub fn new(program: Box<dyn ProgramTrait>, witness: Box<dyn WitnessTrait>) -> Self {
85        Self {
86            program: program,
87            witness: witness,
88        }
89    }
90}
91
92impl IssuanceInput {
93    pub fn new(issuance_amount: u64, asset_entropy: [u8; 32]) -> Self {
94        Self {
95            issuance_amount: issuance_amount,
96            asset_entropy: asset_entropy,
97        }
98    }
99
100    pub fn input(&self) -> Input {
101        let mut input = Input::default();
102
103        input.issuance_value_amount = Some(self.issuance_amount);
104        input.issuance_asset_entropy = Some(self.asset_entropy);
105        input.issuance_inflation_keys = None;
106        input.blinded_issuance = Some(0x00);
107
108        input
109    }
110}