@@ -21,19 +21,21 @@ use crate::ln::channel::ANCHOR_OUTPUT_VALUE_SATOSHI;
21
21
use crate :: ln:: chan_utils;
22
22
use crate :: ln:: chan_utils:: {
23
23
ANCHOR_INPUT_WITNESS_WEIGHT , HTLC_SUCCESS_INPUT_ANCHOR_WITNESS_WEIGHT ,
24
- HTLC_TIMEOUT_INPUT_ANCHOR_WITNESS_WEIGHT , ChannelTransactionParameters , HTLCOutputInCommitment
24
+ HTLC_TIMEOUT_INPUT_ANCHOR_WITNESS_WEIGHT , HTLCOutputInCommitment
25
25
} ;
26
- use crate :: ln:: PaymentPreimage ;
27
26
use crate :: prelude:: * ;
28
- use crate :: sign:: { EcdsaChannelSigner , SignerProvider , WriteableEcdsaChannelSigner , P2WPKH_WITNESS_WEIGHT } ;
27
+ use crate :: sign:: {
28
+ ChannelDerivationParameters , HTLCDescriptor , EcdsaChannelSigner , SignerProvider ,
29
+ WriteableEcdsaChannelSigner , P2WPKH_WITNESS_WEIGHT
30
+ } ;
29
31
use crate :: sync:: Mutex ;
30
32
use crate :: util:: logger:: Logger ;
31
33
32
- use bitcoin:: { OutPoint , PackedLockTime , PubkeyHash , Sequence , Script , Transaction , Txid , TxIn , TxOut , Witness , WPubkeyHash } ;
34
+ use bitcoin:: { OutPoint , PackedLockTime , PubkeyHash , Sequence , Script , Transaction , TxIn , TxOut , Witness , WPubkeyHash } ;
33
35
use bitcoin:: blockdata:: constants:: WITNESS_SCALE_FACTOR ;
34
36
use bitcoin:: consensus:: Encodable ;
35
37
use bitcoin:: secp256k1;
36
- use bitcoin:: secp256k1:: { PublicKey , Secp256k1 } ;
38
+ use bitcoin:: secp256k1:: Secp256k1 ;
37
39
use bitcoin:: secp256k1:: ecdsa:: Signature ;
38
40
39
41
const EMPTY_SCRIPT_SIG_WEIGHT : u64 = 1 /* empty script_sig */ * WITNESS_SCALE_FACTOR as u64 ;
@@ -42,26 +44,6 @@ const BASE_INPUT_SIZE: u64 = 32 /* txid */ + 4 /* vout */ + 4 /* sequence */;
42
44
43
45
const BASE_INPUT_WEIGHT : u64 = BASE_INPUT_SIZE * WITNESS_SCALE_FACTOR as u64 ;
44
46
45
- /// The parameters required to derive a channel signer via [`SignerProvider`].
46
- #[ derive( Clone , Debug , PartialEq , Eq ) ]
47
- pub struct ChannelDerivationParameters {
48
- /// The value in satoshis of the channel we're attempting to spend the anchor output of.
49
- pub value_satoshis : u64 ,
50
- /// The unique identifier to re-derive the signer for the associated channel.
51
- pub keys_id : [ u8 ; 32 ] ,
52
- /// The necessary channel parameters that need to be provided to the re-derived signer through
53
- /// [`ChannelSigner::provide_channel_parameters`].
54
- ///
55
- /// [`ChannelSigner::provide_channel_parameters`]: crate::sign::ChannelSigner::provide_channel_parameters
56
- pub transaction_parameters : ChannelTransactionParameters ,
57
- }
58
-
59
- impl_writeable_tlv_based ! ( ChannelDerivationParameters , {
60
- ( 0 , value_satoshis, required) ,
61
- ( 2 , keys_id, required) ,
62
- ( 4 , transaction_parameters, required) ,
63
- } ) ;
64
-
65
47
/// A descriptor used to sign for a commitment transaction's anchor output.
66
48
#[ derive( Clone , Debug , PartialEq , Eq ) ]
67
49
pub struct AnchorDescriptor {
@@ -120,133 +102,6 @@ impl AnchorDescriptor {
120
102
}
121
103
}
122
104
123
- /// A descriptor used to sign for a commitment transaction's HTLC output.
124
- #[ derive( Clone , Debug , PartialEq , Eq ) ]
125
- pub struct HTLCDescriptor {
126
- /// The parameters required to derive the signer for the HTLC input.
127
- pub channel_derivation_parameters : ChannelDerivationParameters ,
128
- /// The txid of the commitment transaction in which the HTLC output lives.
129
- pub commitment_txid : Txid ,
130
- /// The number of the commitment transaction in which the HTLC output lives.
131
- pub per_commitment_number : u64 ,
132
- /// The key tweak corresponding to the number of the commitment transaction in which the HTLC
133
- /// output lives. This tweak is applied to all the basepoints for both parties in the channel to
134
- /// arrive at unique keys per commitment.
135
- ///
136
- /// See <https://github.com/lightning/bolts/blob/master/03-transactions.md#keys> for more info.
137
- pub per_commitment_point : PublicKey ,
138
- /// The feerate to use on the HTLC claiming transaction. This is always `0` for HTLCs
139
- /// originating from a channel supporting anchor outputs, otherwise it is the channel's
140
- /// negotiated feerate at the time the commitment transaction was built.
141
- pub feerate_per_kw : u32 ,
142
- /// The details of the HTLC as it appears in the commitment transaction.
143
- pub htlc : HTLCOutputInCommitment ,
144
- /// The preimage, if `Some`, to claim the HTLC output with. If `None`, the timeout path must be
145
- /// taken.
146
- pub preimage : Option < PaymentPreimage > ,
147
- /// The counterparty's signature required to spend the HTLC output.
148
- pub counterparty_sig : Signature
149
- }
150
-
151
- impl_writeable_tlv_based ! ( HTLCDescriptor , {
152
- ( 0 , channel_derivation_parameters, required) ,
153
- ( 1 , feerate_per_kw, ( default_value, 0 ) ) ,
154
- ( 2 , commitment_txid, required) ,
155
- ( 4 , per_commitment_number, required) ,
156
- ( 6 , per_commitment_point, required) ,
157
- ( 8 , htlc, required) ,
158
- ( 10 , preimage, option) ,
159
- ( 12 , counterparty_sig, required) ,
160
- } ) ;
161
-
162
- impl HTLCDescriptor {
163
- /// Returns the outpoint of the HTLC output in the commitment transaction. This is the outpoint
164
- /// being spent by the HTLC input in the HTLC transaction.
165
- pub fn outpoint ( & self ) -> OutPoint {
166
- OutPoint {
167
- txid : self . commitment_txid ,
168
- vout : self . htlc . transaction_output_index . unwrap ( ) ,
169
- }
170
- }
171
-
172
- /// Returns the UTXO to be spent by the HTLC input, which can be obtained via
173
- /// [`Self::unsigned_tx_input`].
174
- pub fn previous_utxo < C : secp256k1:: Signing + secp256k1:: Verification > ( & self , secp : & Secp256k1 < C > ) -> TxOut {
175
- TxOut {
176
- script_pubkey : self . witness_script ( secp) . to_v0_p2wsh ( ) ,
177
- value : self . htlc . amount_msat / 1000 ,
178
- }
179
- }
180
-
181
- /// Returns the unsigned transaction input spending the HTLC output in the commitment
182
- /// transaction.
183
- pub fn unsigned_tx_input ( & self ) -> TxIn {
184
- chan_utils:: build_htlc_input (
185
- & self . commitment_txid , & self . htlc , & self . channel_derivation_parameters . transaction_parameters . channel_type_features
186
- )
187
- }
188
-
189
- /// Returns the delayed output created as a result of spending the HTLC output in the commitment
190
- /// transaction.
191
- pub fn tx_output < C : secp256k1:: Signing + secp256k1:: Verification > ( & self , secp : & Secp256k1 < C > ) -> TxOut {
192
- let channel_params = self . channel_derivation_parameters . transaction_parameters . as_holder_broadcastable ( ) ;
193
- let broadcaster_keys = channel_params. broadcaster_pubkeys ( ) ;
194
- let counterparty_keys = channel_params. countersignatory_pubkeys ( ) ;
195
- let broadcaster_delayed_key = chan_utils:: derive_public_key (
196
- secp, & self . per_commitment_point , & broadcaster_keys. delayed_payment_basepoint
197
- ) ;
198
- let counterparty_revocation_key = chan_utils:: derive_public_revocation_key (
199
- secp, & self . per_commitment_point , & counterparty_keys. revocation_basepoint
200
- ) ;
201
- chan_utils:: build_htlc_output (
202
- self . feerate_per_kw , channel_params. contest_delay ( ) , & self . htlc ,
203
- channel_params. channel_type_features ( ) , & broadcaster_delayed_key, & counterparty_revocation_key
204
- )
205
- }
206
-
207
- /// Returns the witness script of the HTLC output in the commitment transaction.
208
- pub fn witness_script < C : secp256k1:: Signing + secp256k1:: Verification > ( & self , secp : & Secp256k1 < C > ) -> Script {
209
- let channel_params = self . channel_derivation_parameters . transaction_parameters . as_holder_broadcastable ( ) ;
210
- let broadcaster_keys = channel_params. broadcaster_pubkeys ( ) ;
211
- let counterparty_keys = channel_params. countersignatory_pubkeys ( ) ;
212
- let broadcaster_htlc_key = chan_utils:: derive_public_key (
213
- secp, & self . per_commitment_point , & broadcaster_keys. htlc_basepoint
214
- ) ;
215
- let counterparty_htlc_key = chan_utils:: derive_public_key (
216
- secp, & self . per_commitment_point , & counterparty_keys. htlc_basepoint
217
- ) ;
218
- let counterparty_revocation_key = chan_utils:: derive_public_revocation_key (
219
- secp, & self . per_commitment_point , & counterparty_keys. revocation_basepoint
220
- ) ;
221
- chan_utils:: get_htlc_redeemscript_with_explicit_keys (
222
- & self . htlc , channel_params. channel_type_features ( ) , & broadcaster_htlc_key, & counterparty_htlc_key,
223
- & counterparty_revocation_key,
224
- )
225
- }
226
-
227
- /// Returns the fully signed witness required to spend the HTLC output in the commitment
228
- /// transaction.
229
- pub fn tx_input_witness ( & self , signature : & Signature , witness_script : & Script ) -> Witness {
230
- chan_utils:: build_htlc_input_witness (
231
- signature, & self . counterparty_sig , & self . preimage , witness_script,
232
- & self . channel_derivation_parameters . transaction_parameters . channel_type_features
233
- )
234
- }
235
-
236
- /// Derives the channel signer required to sign the HTLC input.
237
- pub fn derive_channel_signer < S : WriteableEcdsaChannelSigner , SP : Deref > ( & self , signer_provider : & SP ) -> S
238
- where
239
- SP :: Target : SignerProvider < Signer = S >
240
- {
241
- let mut signer = signer_provider. derive_channel_signer (
242
- self . channel_derivation_parameters . value_satoshis ,
243
- self . channel_derivation_parameters . keys_id ,
244
- ) ;
245
- signer. provide_channel_parameters ( & self . channel_derivation_parameters . transaction_parameters ) ;
246
- signer
247
- }
248
- }
249
-
250
105
/// Represents the different types of transactions, originating from LDK, to be bumped.
251
106
#[ derive( Clone , Debug , PartialEq , Eq ) ]
252
107
pub enum BumpTransactionEvent {
@@ -342,7 +197,6 @@ pub enum BumpTransactionEvent {
342
197
///
343
198
/// [`EcdsaChannelSigner`]: crate::sign::EcdsaChannelSigner
344
199
/// [`EcdsaChannelSigner::sign_holder_htlc_transaction`]: crate::sign::EcdsaChannelSigner::sign_holder_htlc_transaction
345
- /// [`HTLCDescriptor::tx_input_witness`]: HTLCDescriptor::tx_input_witness
346
200
HTLCResolution {
347
201
/// The unique identifier for the claim of the HTLCs in the confirmed commitment
348
202
/// transaction.
0 commit comments