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(Debug, Clone)]
9pub enum RequiredSignature {
10    None,
11    NativeEcdsa,
12    Witness(String),
13}
14
15#[derive(Debug, 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,
57            amount,
58            asset,
59        }
60    }
61
62    pub fn outpoint(&self) -> OutPoint {
63        OutPoint {
64            txid: self.witness_txid,
65            vout: self.witness_output_index,
66        }
67    }
68
69    pub fn input(&self) -> Input {
70        Input {
71            previous_txid: self.witness_txid,
72            previous_output_index: self.witness_output_index,
73            witness_utxo: Some(self.witness_utxo.clone()),
74            sequence: Some(self.sequence),
75            amount: self.amount,
76            asset: self.asset,
77            ..Default::default()
78        }
79    }
80}
81
82impl ProgramInput {
83    pub fn new(program: Box<dyn ProgramTrait>, witness: Box<dyn WitnessTrait>) -> Self {
84        Self { program, witness }
85    }
86}
87
88impl IssuanceInput {
89    pub fn new(issuance_amount: u64, asset_entropy: [u8; 32]) -> Self {
90        Self {
91            issuance_amount,
92            asset_entropy,
93        }
94    }
95
96    pub fn input(&self) -> Input {
97        Input {
98            issuance_value_amount: Some(self.issuance_amount),
99            issuance_asset_entropy: Some(self.asset_entropy),
100            issuance_inflation_keys: None,
101            blinded_issuance: Some(0x00),
102            ..Default::default()
103        }
104    }
105}