@@ -30,7 +30,8 @@ use crate::ln::features::{ChannelTypeFeatures, InitFeatures};
30
30
use crate::ln::msgs;
31
31
use crate::ln::msgs::DecodeError;
32
32
use crate::ln::script::{self, ShutdownScript};
33
- use crate::ln::channelmanager::{self, CounterpartyForwardingInfo, PendingHTLCStatus, HTLCSource, SentHTLCId, HTLCFailureMsg, PendingHTLCInfo, RAACommitmentOrder, BREAKDOWN_TIMEOUT, MIN_CLTV_EXPIRY_DELTA, MAX_LOCAL_BREAKDOWN_TIMEOUT, ChannelShutdownState};
33
+ use crate::ln::channel_state::{ChannelShutdownState, CounterpartyForwardingInfo, InboundHTLCDetails, InboundHTLCStateDetails, OutboundHTLCDetails, OutboundHTLCStateDetails};
34
+ use crate::ln::channelmanager::{self, PendingHTLCStatus, HTLCSource, SentHTLCId, HTLCFailureMsg, PendingHTLCInfo, RAACommitmentOrder, BREAKDOWN_TIMEOUT, MIN_CLTV_EXPIRY_DELTA, MAX_LOCAL_BREAKDOWN_TIMEOUT};
34
35
use crate::ln::chan_utils::{CounterpartyCommitmentSecrets, TxCreationKeys, HTLCOutputInCommitment, htlc_success_tx_weight, htlc_timeout_tx_weight, make_funding_redeemscript, ChannelPublicKeys, CommitmentTransaction, HolderCommitmentTransaction, ChannelTransactionParameters, CounterpartyChannelTransactionParameters, MAX_HTLCS, get_commitment_transaction_number_obscure_factor, ClosingTransaction};
35
36
use crate::ln::chan_utils;
36
37
use crate::ln::onion_utils::HTLCFailReason;
@@ -186,45 +187,6 @@ enum InboundHTLCState {
186
187
LocalRemoved(InboundHTLCRemovalReason),
187
188
}
188
189
189
- /// Exposes the state of pending inbound HTLCs.
190
- ///
191
- /// At a high level, an HTLC being forwarded from one Lightning node to another Lightning node goes
192
- /// through the following states in the state machine:
193
- /// - Announced for addition by the originating node through the update_add_htlc message.
194
- /// - Added to the commitment transaction of the receiving node and originating node in turn
195
- /// through the exchange of commitment_signed and revoke_and_ack messages.
196
- /// - Announced for resolution (fulfillment or failure) by the receiving node through either one of
197
- /// the update_fulfill_htlc, update_fail_htlc, and update_fail_malformed_htlc messages.
198
- /// - Removed from the commitment transaction of the originating node and receiving node in turn
199
- /// through the exchange of commitment_signed and revoke_and_ack messages.
200
- ///
201
- /// This can be used to inspect what next message an HTLC is waiting for to advance its state.
202
- #[derive(Clone, Debug, PartialEq)]
203
- pub enum InboundHTLCStateDetails {
204
- /// We have added this HTLC in our commitment transaction by receiving commitment_signed and
205
- /// returning revoke_and_ack. We are awaiting the appropriate revoke_and_ack's from the remote
206
- /// before this HTLC is included on the remote commitment transaction.
207
- AwaitingRemoteRevokeToAdd,
208
- /// This HTLC has been included in the commitment_signed and revoke_and_ack messages on both sides
209
- /// and is included in both commitment transactions.
210
- ///
211
- /// This HTLC is now safe to either forward or be claimed as a payment by us. The HTLC will
212
- /// remain in this state until the forwarded upstream HTLC has been resolved and we resolve this
213
- /// HTLC correspondingly, or until we claim it as a payment. If it is part of a multipart
214
- /// payment, it will only be claimed together with other required parts.
215
- Committed,
216
- /// We have received the preimage for this HTLC and it is being removed by fulfilling it with
217
- /// update_fulfill_htlc. This HTLC is still on both commitment transactions, but we are awaiting
218
- /// the appropriate revoke_and_ack's from the remote before this HTLC is removed from the remote
219
- /// commitment transaction after update_fulfill_htlc.
220
- AwaitingRemoteRevokeToRemoveFulfill,
221
- /// The HTLC is being removed by failing it with update_fail_htlc or update_fail_malformed_htlc.
222
- /// This HTLC is still on both commitment transactions, but we are awaiting the appropriate
223
- /// revoke_and_ack's from the remote before this HTLC is removed from the remote commitment
224
- /// transaction.
225
- AwaitingRemoteRevokeToRemoveFail,
226
- }
227
-
228
190
impl From<&InboundHTLCState> for Option<InboundHTLCStateDetails> {
229
191
fn from(state: &InboundHTLCState) -> Option<InboundHTLCStateDetails> {
230
192
match state {
@@ -245,13 +207,6 @@ impl From<&InboundHTLCState> for Option<InboundHTLCStateDetails> {
245
207
}
246
208
}
247
209
248
- impl_writeable_tlv_based_enum_upgradable!(InboundHTLCStateDetails,
249
- (0, AwaitingRemoteRevokeToAdd) => {},
250
- (2, Committed) => {},
251
- (4, AwaitingRemoteRevokeToRemoveFulfill) => {},
252
- (6, AwaitingRemoteRevokeToRemoveFail) => {};
253
- );
254
-
255
210
struct InboundHTLCOutput {
256
211
htlc_id: u64,
257
212
amount_msat: u64,
@@ -260,53 +215,6 @@ struct InboundHTLCOutput {
260
215
state: InboundHTLCState,
261
216
}
262
217
263
- /// Exposes details around pending inbound HTLCs.
264
- #[derive(Clone, Debug, PartialEq)]
265
- pub struct InboundHTLCDetails {
266
- /// The HTLC ID.
267
- /// The IDs are incremented by 1 starting from 0 for each offered HTLC.
268
- /// They are unique per channel and inbound/outbound direction, unless an HTLC was only announced
269
- /// and not part of any commitment transaction.
270
- pub htlc_id: u64,
271
- /// The amount in msat.
272
- pub amount_msat: u64,
273
- /// The block height at which this HTLC expires.
274
- pub cltv_expiry: u32,
275
- /// The payment hash.
276
- pub payment_hash: PaymentHash,
277
- /// The state of the HTLC in the state machine.
278
- ///
279
- /// Determines on which commitment transactions the HTLC is included and what message the HTLC is
280
- /// waiting for to advance to the next state.
281
- ///
282
- /// See [`InboundHTLCStateDetails`] for information on the specific states.
283
- ///
284
- /// LDK will always fill this field in, but when downgrading to prior versions of LDK, new
285
- /// states may result in `None` here.
286
- pub state: Option<InboundHTLCStateDetails>,
287
- /// Whether the HTLC has an output below the local dust limit. If so, the output will be trimmed
288
- /// from the local commitment transaction and added to the commitment transaction fee.
289
- /// For non-anchor channels, this takes into account the cost of the second-stage HTLC
290
- /// transactions as well.
291
- ///
292
- /// When the local commitment transaction is broadcasted as part of a unilateral closure,
293
- /// the value of this HTLC will therefore not be claimable but instead burned as a transaction
294
- /// fee.
295
- ///
296
- /// Note that dust limits are specific to each party. An HTLC can be dust for the local
297
- /// commitment transaction but not for the counterparty's commitment transaction and vice versa.
298
- pub is_dust: bool,
299
- }
300
-
301
- impl_writeable_tlv_based!(InboundHTLCDetails, {
302
- (0, htlc_id, required),
303
- (2, amount_msat, required),
304
- (4, cltv_expiry, required),
305
- (6, payment_hash, required),
306
- (7, state, upgradable_option),
307
- (8, is_dust, required),
308
- });
309
-
310
218
#[cfg_attr(test, derive(Clone, Debug, PartialEq))]
311
219
enum OutboundHTLCState {
312
220
/// Added by us and included in a commitment_signed (if we were AwaitingRemoteRevoke when we
@@ -340,42 +248,6 @@ enum OutboundHTLCState {
340
248
AwaitingRemovedRemoteRevoke(OutboundHTLCOutcome),
341
249
}
342
250
343
- /// Exposes the state of pending outbound HTLCs.
344
- ///
345
- /// At a high level, an HTLC being forwarded from one Lightning node to another Lightning node goes
346
- /// through the following states in the state machine:
347
- /// - Announced for addition by the originating node through the update_add_htlc message.
348
- /// - Added to the commitment transaction of the receiving node and originating node in turn
349
- /// through the exchange of commitment_signed and revoke_and_ack messages.
350
- /// - Announced for resolution (fulfillment or failure) by the receiving node through either one of
351
- /// the update_fulfill_htlc, update_fail_htlc, and update_fail_malformed_htlc messages.
352
- /// - Removed from the commitment transaction of the originating node and receiving node in turn
353
- /// through the exchange of commitment_signed and revoke_and_ack messages.
354
- ///
355
- /// This can be used to inspect what next message an HTLC is waiting for to advance its state.
356
- #[derive(Clone, Debug, PartialEq)]
357
- pub enum OutboundHTLCStateDetails {
358
- /// We are awaiting the appropriate revoke_and_ack's from the remote before the HTLC is added
359
- /// on the remote's commitment transaction after update_add_htlc.
360
- AwaitingRemoteRevokeToAdd,
361
- /// The HTLC has been added to the remote's commitment transaction by sending commitment_signed
362
- /// and receiving revoke_and_ack in return.
363
- ///
364
- /// The HTLC will remain in this state until the remote node resolves the HTLC, or until we
365
- /// unilaterally close the channel due to a timeout with an uncooperative remote node.
366
- Committed,
367
- /// The HTLC has been fulfilled successfully by the remote with a preimage in update_fulfill_htlc,
368
- /// and we removed the HTLC from our commitment transaction by receiving commitment_signed and
369
- /// returning revoke_and_ack. We are awaiting the appropriate revoke_and_ack's from the remote
370
- /// for the removal from its commitment transaction.
371
- AwaitingRemoteRevokeToRemoveSuccess,
372
- /// The HTLC has been failed by the remote with update_fail_htlc or update_fail_malformed_htlc,
373
- /// and we removed the HTLC from our commitment transaction by receiving commitment_signed and
374
- /// returning revoke_and_ack. We are awaiting the appropriate revoke_and_ack's from the remote
375
- /// for the removal from its commitment transaction.
376
- AwaitingRemoteRevokeToRemoveFailure,
377
- }
378
-
379
251
impl From<&OutboundHTLCState> for OutboundHTLCStateDetails {
380
252
fn from(state: &OutboundHTLCState) -> OutboundHTLCStateDetails {
381
253
match state {
@@ -399,13 +271,6 @@ impl From<&OutboundHTLCState> for OutboundHTLCStateDetails {
399
271
}
400
272
}
401
273
402
- impl_writeable_tlv_based_enum_upgradable!(OutboundHTLCStateDetails,
403
- (0, AwaitingRemoteRevokeToAdd) => {},
404
- (2, Committed) => {},
405
- (4, AwaitingRemoteRevokeToRemoveSuccess) => {},
406
- (6, AwaitingRemoteRevokeToRemoveFailure) => {};
407
- );
408
-
409
274
#[derive(Clone)]
410
275
#[cfg_attr(test, derive(Debug, PartialEq))]
411
276
enum OutboundHTLCOutcome {
@@ -444,58 +309,6 @@ struct OutboundHTLCOutput {
444
309
skimmed_fee_msat: Option<u64>,
445
310
}
446
311
447
- /// Exposes details around pending outbound HTLCs.
448
- #[derive(Clone, Debug, PartialEq)]
449
- pub struct OutboundHTLCDetails {
450
- /// The HTLC ID.
451
- /// The IDs are incremented by 1 starting from 0 for each offered HTLC.
452
- /// They are unique per channel and inbound/outbound direction, unless an HTLC was only announced
453
- /// and not part of any commitment transaction.
454
- ///
455
- /// Not present when we are awaiting a remote revocation and the HTLC is not added yet.
456
- pub htlc_id: Option<u64>,
457
- /// The amount in msat.
458
- pub amount_msat: u64,
459
- /// The block height at which this HTLC expires.
460
- pub cltv_expiry: u32,
461
- /// The payment hash.
462
- pub payment_hash: PaymentHash,
463
- /// The state of the HTLC in the state machine.
464
- ///
465
- /// Determines on which commitment transactions the HTLC is included and what message the HTLC is
466
- /// waiting for to advance to the next state.
467
- ///
468
- /// See [`OutboundHTLCStateDetails`] for information on the specific states.
469
- ///
470
- /// LDK will always fill this field in, but when downgrading to prior versions of LDK, new
471
- /// states may result in `None` here.
472
- pub state: Option<OutboundHTLCStateDetails>,
473
- /// The extra fee being skimmed off the top of this HTLC.
474
- pub skimmed_fee_msat: Option<u64>,
475
- /// Whether the HTLC has an output below the local dust limit. If so, the output will be trimmed
476
- /// from the local commitment transaction and added to the commitment transaction fee.
477
- /// For non-anchor channels, this takes into account the cost of the second-stage HTLC
478
- /// transactions as well.
479
- ///
480
- /// When the local commitment transaction is broadcasted as part of a unilateral closure,
481
- /// the value of this HTLC will therefore not be claimable but instead burned as a transaction
482
- /// fee.
483
- ///
484
- /// Note that dust limits are specific to each party. An HTLC can be dust for the local
485
- /// commitment transaction but not for the counterparty's commitment transaction and vice versa.
486
- pub is_dust: bool,
487
- }
488
-
489
- impl_writeable_tlv_based!(OutboundHTLCDetails, {
490
- (0, htlc_id, required),
491
- (2, amount_msat, required),
492
- (4, cltv_expiry, required),
493
- (6, payment_hash, required),
494
- (7, state, upgradable_option),
495
- (8, skimmed_fee_msat, required),
496
- (10, is_dust, required),
497
- });
498
-
499
312
/// See AwaitingRemoteRevoke ChannelState for more info
500
313
#[cfg_attr(test, derive(Clone, Debug, PartialEq))]
501
314
enum HTLCUpdateAwaitingACK {
0 commit comments