smplx_sdk/transaction/
partial_input.rs1use 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}