Skip to content

Commit 0c3a47c

Browse files
committed
Fix tracking of collected value across pathfinding iterations
If we end up "paying" for an `htlc_minimum_msat` with fees, we increment `already_collected_value_msat` by more than the amount of the path that we collected (who's `value_contribution_msat` is higher than the total payment amount, despite having been reduced down to the payment amount). This throws off our total value collection target, though in the coming commit(s) it would also throw off our path selection calculations.
1 parent f75b6cb commit 0c3a47c

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

lightning/src/routing/router.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1476,7 +1476,7 @@ where L::Target: Logger {
14761476
// Both these cases (and other cases except reaching recommended_value_msat) mean that
14771477
// paths_collection will be stopped because found_new_path==false.
14781478
// This is not necessarily a routing failure.
1479-
'path_construction: while let Some(RouteGraphNode { node_id, lowest_fee_to_node, total_cltv_delta, value_contribution_msat, path_htlc_minimum_msat, path_penalty_msat, path_length_to_node, .. }) = targets.pop() {
1479+
'path_construction: while let Some(RouteGraphNode { node_id, lowest_fee_to_node, total_cltv_delta, mut value_contribution_msat, path_htlc_minimum_msat, path_penalty_msat, path_length_to_node, .. }) = targets.pop() {
14801480

14811481
// Since we're going payee-to-payer, hitting our node as a target means we should stop
14821482
// traversing the graph and arrange the path out of what we found.
@@ -1542,7 +1542,9 @@ where L::Target: Logger {
15421542
// on some channels we already passed (assuming dest->source direction). Here, we
15431543
// recompute the fees again, so that if that's the case, we match the currently
15441544
// underpaid htlc_minimum_msat with fees.
1545-
payment_path.update_value_and_recompute_fees(cmp::min(value_contribution_msat, final_value_msat));
1545+
debug_assert_eq!(payment_path.get_value_msat(), value_contribution_msat);
1546+
value_contribution_msat = cmp::min(value_contribution_msat, final_value_msat);
1547+
payment_path.update_value_and_recompute_fees(value_contribution_msat);
15461548

15471549
// Since a path allows to transfer as much value as
15481550
// the smallest channel it has ("bottleneck"), we should recompute

0 commit comments

Comments
 (0)