smplx_sdk/transaction/
partial_input.rs1use simplicityhl::elements::confidential::{Asset, Value};
2use simplicityhl::elements::pset::Input;
3use simplicityhl::elements::{AssetId, LockTime, OutPoint, Sequence, TxOut, TxOutSecrets, Txid};
4
5use crate::program::ProgramTrait;
6use crate::program::WitnessTrait;
7
8use super::UTXO;
9
10#[derive(Debug, Clone)]
11pub enum RequiredSignature {
12 None,
13 NativeEcdsa,
14 Witness(String),
15}
16
17#[derive(Debug, Clone)]
18pub struct PartialInput {
19 pub witness_txid: Txid,
20 pub witness_output_index: u32,
21 pub witness_utxo: TxOut,
22 pub sequence: Sequence,
23 pub locktime: LockTime,
24 pub amount: Option<u64>,
26 pub asset: Option<AssetId>,
27 pub secrets: Option<TxOutSecrets>,
29}
30
31#[derive(Clone)]
32pub struct ProgramInput {
33 pub program: Box<dyn ProgramTrait>,
34 pub witness: Box<dyn WitnessTrait>,
35}
36
37#[derive(Clone)]
38pub struct IssuanceInput {
39 pub issuance_amount: u64,
40 pub asset_entropy: [u8; 32],
41}
42
43impl PartialInput {
44 pub fn new(utxo: UTXO) -> Self {
45 let amount = match utxo.txout.value {
46 Value::Explicit(value) => Some(value),
47 _ => None,
48 };
49 let asset = match utxo.txout.asset {
50 Asset::Explicit(asset) => Some(asset),
51 _ => None,
52 };
53
54 Self {
55 witness_txid: utxo.outpoint.txid,
56 witness_output_index: utxo.outpoint.vout,
57 witness_utxo: utxo.txout,
58 sequence: Sequence::default(),
59 locktime: LockTime::ZERO,
60 amount,
61 asset,
62 secrets: utxo.secrets,
63 }
64 }
65
66 pub fn with_sequence(mut self, sequence: Sequence) -> Self {
67 self.sequence = sequence;
68
69 self
70 }
71
72 pub fn with_locktime(mut self, locktime: LockTime) -> Self {
73 self.locktime = locktime;
74
75 self
76 }
77
78 pub fn outpoint(&self) -> OutPoint {
79 OutPoint {
80 txid: self.witness_txid,
81 vout: self.witness_output_index,
82 }
83 }
84
85 pub fn to_input(&self) -> Input {
86 let time_locktime = match self.locktime {
87 LockTime::Seconds(value) => Some(value),
88 _ => None,
89 };
90 let height_locktime = match self.locktime {
92 LockTime::Blocks(value) => Some(value),
93 _ => None,
94 };
95
96 Input {
97 previous_txid: self.witness_txid,
98 previous_output_index: self.witness_output_index,
99 witness_utxo: Some(self.witness_utxo.clone()),
100 sequence: Some(self.sequence),
101 required_time_locktime: time_locktime,
102 required_height_locktime: height_locktime,
103 amount: self.amount,
104 asset: self.asset,
105 ..Default::default()
106 }
107 }
108}
109
110impl ProgramInput {
111 pub fn new(program: Box<dyn ProgramTrait>, witness: Box<dyn WitnessTrait>) -> Self {
112 Self { program, witness }
113 }
114}
115
116impl IssuanceInput {
117 pub fn new(issuance_amount: u64, asset_entropy: [u8; 32]) -> Self {
118 Self {
119 issuance_amount,
120 asset_entropy,
121 }
122 }
123
124 pub fn to_input(&self) -> Input {
125 Input {
126 issuance_value_amount: Some(self.issuance_amount),
127 issuance_asset_entropy: Some(self.asset_entropy),
128 issuance_inflation_keys: None,
129 blinded_issuance: Some(0x00),
130 ..Default::default()
131 }
132 }
133}