@@ -20,69 +20,62 @@ use crate::sign::{P2TR_KEY_PATH_WITNESS_WEIGHT, P2WPKH_WITNESS_WEIGHT};
2020
2121/// The components of a splice's funding transaction that are contributed by one party.
2222#[ derive( Debug , Clone ) ]
23- pub enum SpliceContribution {
24- /// When funds are added to a channel.
25- SpliceIn {
26- /// The amount to contribute to the splice.
27- value : Amount ,
28-
29- /// The inputs included in the splice's funding transaction to meet the contributed amount
30- /// plus fees. Any excess amount will be sent to a change output.
31- inputs : Vec < FundingTxInput > ,
32-
33- /// An optional change output script. This will be used if needed or, when not set,
34- /// generated using [`SignerProvider::get_destination_script`].
35- ///
36- /// [`SignerProvider::get_destination_script`]: crate::sign::SignerProvider::get_destination_script
37- change_script : Option < ScriptBuf > ,
38- } ,
39- /// When funds are removed from a channel.
40- SpliceOut {
41- /// The outputs to include in the splice's funding transaction. The total value of all
42- /// outputs plus fees will be the amount that is removed.
43- outputs : Vec < TxOut > ,
44- } ,
23+ pub struct SpliceContribution {
24+ /// The amount to contribute to the splice.
25+ value : SignedAmount ,
26+
27+ /// The inputs included in the splice's funding transaction to meet the contributed amount
28+ /// plus fees. Any excess amount will be sent to a change output.
29+ inputs : Vec < FundingTxInput > ,
30+
31+ /// The outputs to include in the splice's funding transaction. The total value of all
32+ /// outputs plus fees will be the amount that is removed.
33+ outputs : Vec < TxOut > ,
34+
35+ /// An optional change output script. This will be used if needed or, when not set,
36+ /// generated using [`SignerProvider::get_destination_script`].
37+ ///
38+ /// [`SignerProvider::get_destination_script`]: crate::sign::SignerProvider::get_destination_script
39+ change_script : Option < ScriptBuf > ,
4540}
4641
4742impl SpliceContribution {
43+ /// Creates a contribution for when funds are only added to a channel.
44+ pub fn splice_in (
45+ value : Amount , inputs : Vec < FundingTxInput > , change_script : Option < ScriptBuf > ,
46+ ) -> Self {
47+ let value_added = value. to_signed ( ) . unwrap_or ( SignedAmount :: MAX ) ;
48+
49+ Self { value : value_added, inputs, outputs : vec ! [ ] , change_script }
50+ }
51+
52+ /// Creates a contribution for when funds are only removed from a channel.
53+ pub fn splice_out ( outputs : Vec < TxOut > ) -> Self {
54+ let value_removed = outputs
55+ . iter ( )
56+ . map ( |txout| txout. value )
57+ . sum :: < Amount > ( )
58+ . to_signed ( )
59+ . unwrap_or ( SignedAmount :: MAX ) ;
60+
61+ Self { value : -value_removed, inputs : vec ! [ ] , outputs, change_script : None }
62+ }
63+
4864 pub ( super ) fn value ( & self ) -> SignedAmount {
49- match self {
50- SpliceContribution :: SpliceIn { value, .. } => {
51- value. to_signed ( ) . unwrap_or ( SignedAmount :: MAX )
52- } ,
53- SpliceContribution :: SpliceOut { outputs } => {
54- let value_removed = outputs
55- . iter ( )
56- . map ( |txout| txout. value )
57- . sum :: < Amount > ( )
58- . to_signed ( )
59- . unwrap_or ( SignedAmount :: MAX ) ;
60- -value_removed
61- } ,
62- }
65+ self . value
6366 }
6467
6568 pub ( super ) fn inputs ( & self ) -> & [ FundingTxInput ] {
66- match self {
67- SpliceContribution :: SpliceIn { inputs, .. } => & inputs[ ..] ,
68- SpliceContribution :: SpliceOut { .. } => & [ ] ,
69- }
69+ & self . inputs [ ..]
7070 }
7171
7272 pub ( super ) fn outputs ( & self ) -> & [ TxOut ] {
73- match self {
74- SpliceContribution :: SpliceIn { .. } => & [ ] ,
75- SpliceContribution :: SpliceOut { outputs } => & outputs[ ..] ,
76- }
73+ & self . outputs [ ..]
7774 }
7875
7976 pub ( super ) fn into_tx_parts ( self ) -> ( Vec < FundingTxInput > , Vec < TxOut > , Option < ScriptBuf > ) {
80- match self {
81- SpliceContribution :: SpliceIn { inputs, change_script, .. } => {
82- ( inputs, vec ! [ ] , change_script)
83- } ,
84- SpliceContribution :: SpliceOut { outputs } => ( vec ! [ ] , outputs, None ) ,
85- }
77+ let SpliceContribution { value : _, inputs, outputs, change_script } = self ;
78+ ( inputs, outputs, change_script)
8679 }
8780}
8881
0 commit comments