Skip to content

Commit 15aec58

Browse files
committed
Rename PendingPaymentDetails and add payment hash
1 parent fb0b1af commit 15aec58

File tree

2 files changed

+33
-17
lines changed

2 files changed

+33
-17
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1206,22 +1206,31 @@ impl ChannelDetails {
12061206

12071207
/// Used to express the status of payments that are currently pending resolution.
12081208
#[derive(Debug, PartialEq)]
1209-
pub enum PendingPaymentDetails {
1209+
pub enum RecentPaymentDetails {
12101210
/// When a payment is still being sent and awaiting successful delivery.
1211-
Retryable {
1211+
Pending {
1212+
/// Hash of the payment that is currently being sent but has yet to be fulfilled or
1213+
/// abandoned.
1214+
payment_hash: PaymentHash,
12121215
/// Total amount (in msat) across all paths for this payment, not just the amount currently
12131216
/// inflight.
1214-
total_msat: u64
1217+
total_msat: u64,
12151218
},
12161219
/// When a pending payment is fulfilled, we continue tracking it until all pending HTLCs have
12171220
/// been resolved. These payments will only cease being tracked upon receiving or handling
12181221
/// [`Event::PaymentSent`].
1219-
Fulfilled,
1222+
Fulfilled {
1223+
/// Hash of the payment that was claimed.
1224+
payment_hash: Option<PaymentHash>,
1225+
},
12201226
/// After a payment is explicitly abandoned by calling [`ChannelManager::abandon_payment`], they
12211227
/// are marked as abandoned until an [`Event::PaymentFailed`] event is generated. A payment
12221228
/// could also be marked as abandoned if pathfinding fails repeatedly and we will no longer
12231229
/// retry sending.
1224-
Abandoned,
1230+
Abandoned {
1231+
/// Hash of the payment that we have given up trying to send.
1232+
payment_hash: PaymentHash,
1233+
},
12251234
}
12261235

12271236
/// If a payment fails to send, it can be in one of several states. This enum is returned as the
@@ -1792,17 +1801,20 @@ impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
17921801
}
17931802

17941803
/// Gets a list of payments in ramdom order that are currently pending resolution.
1795-
pub fn list_pending_payments(&self) -> Vec<PendingPaymentDetails> {
1804+
pub fn list_pending_payments(&self) -> Vec<RecentPaymentDetails> {
17961805
self.pending_outbound_payments.lock().unwrap().iter()
17971806
.filter_map(|(_, pending_outbound_payment)| match pending_outbound_payment {
1798-
PendingOutboundPayment::Retryable { total_msat, .. } => {
1799-
Some(PendingPaymentDetails::Retryable { total_msat: *total_msat })
1807+
PendingOutboundPayment::Retryable { payment_hash, total_msat, .. } => {
1808+
Some(RecentPaymentDetails::Pending {
1809+
payment_hash: *payment_hash,
1810+
total_msat: *total_msat,
1811+
})
18001812
},
1801-
PendingOutboundPayment::Abandoned { .. } => {
1802-
Some(PendingPaymentDetails::Abandoned)
1813+
PendingOutboundPayment::Abandoned { payment_hash, .. } => {
1814+
Some(RecentPaymentDetails::Abandoned { payment_hash: *payment_hash })
18031815
},
1804-
PendingOutboundPayment::Fulfilled { .. } => {
1805-
Some(PendingPaymentDetails::Fulfilled)
1816+
PendingOutboundPayment::Fulfilled { payment_hash, .. } => {
1817+
Some(RecentPaymentDetails::Fulfilled { payment_hash: *payment_hash })
18061818
},
18071819
PendingOutboundPayment::Legacy { .. } => None
18081820
})

lightning/src/ln/payment_tests.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use crate::chain::channelmonitor::{ANTI_REORG_DELAY, LATENCY_GRACE_PERIOD_BLOCKS
1616
use crate::chain::transaction::OutPoint;
1717
use crate::chain::keysinterface::KeysInterface;
1818
use crate::ln::channel::EXPIRE_PREV_CONFIG_TICKS;
19-
use crate::ln::channelmanager::{self, BREAKDOWN_TIMEOUT, ChannelManager, MPP_TIMEOUT_TICKS, MIN_CLTV_EXPIRY_DELTA, PaymentId, PaymentSendFailure, IDEMPOTENCY_TIMEOUT_TICKS, PendingPaymentDetails};
19+
use crate::ln::channelmanager::{self, BREAKDOWN_TIMEOUT, ChannelManager, MPP_TIMEOUT_TICKS, MIN_CLTV_EXPIRY_DELTA, PaymentId, PaymentSendFailure, IDEMPOTENCY_TIMEOUT_TICKS, RecentPaymentDetails};
2020
use crate::ln::msgs;
2121
use crate::ln::msgs::ChannelMessageHandler;
2222
use crate::routing::router::{PaymentParameters, get_route};
@@ -1257,7 +1257,11 @@ fn test_trivial_inflight_htlc_tracking(){
12571257
let (_, _, chan_2_id, _) = create_announced_chan_between_nodes(&nodes, 1, 2, channelmanager::provided_init_features(), channelmanager::provided_init_features());
12581258

12591259
// Send and claim the payment. Inflight HTLCs should be empty.
1260-
send_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 500000);
1260+
let (route, payment_hash, payment_preimage, payment_secret) = get_route_and_payment_hash!(nodes[0], nodes[2], 500000);
1261+
nodes[0].node.send_payment(&route, payment_hash, &Some(payment_secret), PaymentId(payment_hash.0)).unwrap();
1262+
check_added_monitors!(nodes[0], 1);
1263+
pass_along_route(&nodes[0], &[&vec!(&nodes[1], &nodes[2])[..]], 500000, payment_hash, payment_secret);
1264+
claim_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], payment_preimage);
12611265
{
12621266
let inflight_htlcs = node_chanmgrs[0].compute_inflight_htlcs();
12631267

@@ -1282,7 +1286,7 @@ fn test_trivial_inflight_htlc_tracking(){
12821286

12831287
let pending_payments = nodes[0].node.list_pending_payments();
12841288
assert_eq!(pending_payments.len(), 1);
1285-
assert_eq!(pending_payments[0], PendingPaymentDetails::Fulfilled);
1289+
assert_eq!(pending_payments[0], RecentPaymentDetails::Fulfilled { payment_hash: Some(payment_hash) });
12861290
}
12871291

12881292
// Remove fulfilled payment
@@ -1291,7 +1295,7 @@ fn test_trivial_inflight_htlc_tracking(){
12911295
}
12921296

12931297
// Send the payment, but do not claim it. Our inflight HTLCs should contain the pending payment.
1294-
let (payment_preimage, _, _) = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 500000);
1298+
let (payment_preimage, payment_hash, _) = route_payment(&nodes[0], &vec!(&nodes[1], &nodes[2])[..], 500000);
12951299
{
12961300
let inflight_htlcs = node_chanmgrs[0].compute_inflight_htlcs();
12971301

@@ -1317,7 +1321,7 @@ fn test_trivial_inflight_htlc_tracking(){
13171321

13181322
let pending_payments = nodes[0].node.list_pending_payments();
13191323
assert_eq!(pending_payments.len(), 1);
1320-
assert_eq!(pending_payments[0], PendingPaymentDetails::Retryable { total_msat: 500000 });
1324+
assert_eq!(pending_payments[0], RecentPaymentDetails::Pending { payment_hash, total_msat: 500000 });
13211325
}
13221326

13231327
// Now, let's claim the payment. This should result in the used liquidity to return `None`.

0 commit comments

Comments
 (0)