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(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}