Skip to content

Commit 1b95a5c

Browse files
Set extra skimmed fee on intercepted forward
Receivers need to use this value to verify incoming payments if ChannelConfig::accept_underpaying_htlcs is set.
1 parent fe2f6b2 commit 1b95a5c

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,9 @@ pub(super) struct PendingHTLCInfo {
131131
/// may overshoot this in either case)
132132
pub(super) outgoing_amt_msat: u64,
133133
pub(super) outgoing_cltv_value: u32,
134+
/// The fee being skimmed off the top of this HTLC. If this is a forward, it'll be the fee we are
135+
/// skimming. If we're receiving this HTLC, it's the fee that our counterparty skimmed.
136+
pub(super) skimmed_fee_msat: Option<u64>,
134137
}
135138

136139
#[derive(Clone)] // See Channel::revoke_and_ack for why, tl;dr: Rust bug
@@ -2616,6 +2619,7 @@ where
26162619
incoming_amt_msat: Some(amt_msat),
26172620
outgoing_amt_msat: hop_data.amt_to_forward,
26182621
outgoing_cltv_value: hop_data.outgoing_cltv_value,
2622+
skimmed_fee_msat: None,
26192623
})
26202624
}
26212625

@@ -2885,6 +2889,7 @@ where
28852889
incoming_amt_msat: Some(msg.amount_msat),
28862890
outgoing_amt_msat: next_hop_data.amt_to_forward,
28872891
outgoing_cltv_value: next_hop_data.outgoing_cltv_value,
2892+
skimmed_fee_msat: None,
28882893
})
28892894
}
28902895
}
@@ -3525,7 +3530,10 @@ where
35253530
},
35263531
_ => unreachable!() // Only `PendingHTLCRouting::Forward`s are intercepted
35273532
};
3533+
let skimmed_fee_msat =
3534+
payment.forward_info.outgoing_amt_msat.saturating_sub(amt_to_forward_msat);
35283535
let pending_htlc_info = PendingHTLCInfo {
3536+
skimmed_fee_msat: if skimmed_fee_msat == 0 { None } else { Some(skimmed_fee_msat) },
35293537
outgoing_amt_msat: amt_to_forward_msat, routing, ..payment.forward_info
35303538
};
35313539

@@ -3595,7 +3603,7 @@ where
35953603
prev_short_channel_id, prev_htlc_id, prev_funding_outpoint, prev_user_channel_id,
35963604
forward_info: PendingHTLCInfo {
35973605
routing, incoming_shared_secret, payment_hash, outgoing_amt_msat,
3598-
outgoing_cltv_value, incoming_amt_msat: _
3606+
outgoing_cltv_value, ..
35993607
}
36003608
}) => {
36013609
macro_rules! failure_handler {
@@ -3708,7 +3716,7 @@ where
37083716
prev_short_channel_id, prev_htlc_id, prev_funding_outpoint, prev_user_channel_id: _,
37093717
forward_info: PendingHTLCInfo {
37103718
incoming_shared_secret, payment_hash, outgoing_amt_msat, outgoing_cltv_value,
3711-
routing: PendingHTLCRouting::Forward { onion_packet, .. }, incoming_amt_msat: _,
3719+
routing: PendingHTLCRouting::Forward { onion_packet, .. }, ..
37123720
},
37133721
}) => {
37143722
log_trace!(self.logger, "Adding HTLC from short id {} with payment_hash {} to channel with short id {} after delay", prev_short_channel_id, log_bytes!(payment_hash.0), short_chan_id);
@@ -7443,6 +7451,7 @@ impl_writeable_tlv_based!(PendingHTLCInfo, {
74437451
(6, outgoing_amt_msat, required),
74447452
(8, outgoing_cltv_value, required),
74457453
(9, incoming_amt_msat, option),
7454+
(10, skimmed_fee_msat, option),
74467455
});
74477456

74487457

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
## Backwards Compat
2+
3+
* Forwarding less than the expected amount in `ChannelManager::forward_intercepted_htlc` may break
4+
compatibility with versions of LDK prior to 0.0.116

0 commit comments

Comments
 (0)