Skip to content

Commit 649144d

Browse files
committed
Account for leftover fee budget when retrying via check_retry_payment
1 parent ac57163 commit 649144d

File tree

1 file changed

+25
-9
lines changed

1 file changed

+25
-9
lines changed

lightning/src/ln/outbound_payment.rs

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -215,11 +215,19 @@ impl PendingOutboundPayment {
215215
PendingOutboundPayment::InvoiceReceived { .. } => { debug_assert!(false); false },
216216
};
217217
if remove_res {
218-
if let PendingOutboundPayment::Retryable { ref mut pending_amt_msat, ref mut pending_fee_msat, .. } = self {
219-
let path = path.expect("Fulfilling a payment should always come with a path");
218+
if let PendingOutboundPayment::Retryable {
219+
ref mut pending_amt_msat, ref mut pending_fee_msat,
220+
ref mut remaining_max_total_routing_fee_msat, ..
221+
} = self {
222+
let path = path.expect("Removing a failed payment should always come with a path");
220223
*pending_amt_msat -= path.final_value_msat();
224+
let path_fee_msat = path.fee_msat();
221225
if let Some(fee_msat) = pending_fee_msat.as_mut() {
222-
*fee_msat -= path.fee_msat();
226+
*fee_msat -= path_fee_msat;
227+
}
228+
229+
if let Some(max_total_routing_fee_msat) = remaining_max_total_routing_fee_msat.as_mut() {
230+
*max_total_routing_fee_msat = max_total_routing_fee_msat.saturating_add(path_fee_msat);
223231
}
224232
}
225233
}
@@ -238,11 +246,19 @@ impl PendingOutboundPayment {
238246
PendingOutboundPayment::Abandoned { .. } => false,
239247
};
240248
if insert_res {
241-
if let PendingOutboundPayment::Retryable { ref mut pending_amt_msat, ref mut pending_fee_msat, .. } = self {
242-
*pending_amt_msat += path.final_value_msat();
243-
if let Some(fee_msat) = pending_fee_msat.as_mut() {
244-
*fee_msat += path.fee_msat();
245-
}
249+
if let PendingOutboundPayment::Retryable {
250+
ref mut pending_amt_msat, ref mut pending_fee_msat,
251+
ref mut remaining_max_total_routing_fee_msat, ..
252+
} = self {
253+
*pending_amt_msat += path.final_value_msat();
254+
let path_fee_msat = path.fee_msat();
255+
if let Some(fee_msat) = pending_fee_msat.as_mut() {
256+
*fee_msat += path_fee_msat;
257+
}
258+
259+
if let Some(max_total_routing_fee_msat) = remaining_max_total_routing_fee_msat.as_mut() {
260+
*max_total_routing_fee_msat = max_total_routing_fee_msat.saturating_sub(path_fee_msat);
261+
}
246262
}
247263
}
248264
insert_res
@@ -1573,7 +1589,7 @@ impl OutboundPayments {
15731589
is_retryable_now = false;
15741590
}
15751591
if payment.get().remaining_parts() == 0 {
1576-
if let PendingOutboundPayment::Abandoned { payment_hash, reason, .. }= payment.get() {
1592+
if let PendingOutboundPayment::Abandoned { payment_hash, reason, .. } = payment.get() {
15771593
if !payment_is_probe {
15781594
full_failure_ev = Some(events::Event::PaymentFailed {
15791595
payment_id: *payment_id,

0 commit comments

Comments
 (0)