@@ -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
@@ -2890,6 +2894,7 @@ where
28902894 incoming_amt_msat : Some ( msg. amount_msat ) ,
28912895 outgoing_amt_msat : next_hop_data. amt_to_forward ,
28922896 outgoing_cltv_value : next_hop_data. outgoing_cltv_value ,
2897+ skimmed_fee_msat : None ,
28932898 } )
28942899 }
28952900 }
@@ -3485,13 +3490,16 @@ where
34853490 /// [`ChannelManager::fail_intercepted_htlc`] MUST be called in response to the event.
34863491 ///
34873492 /// Note that LDK does not enforce fee requirements in `amt_to_forward_msat`, and will not stop
3488- /// you from forwarding more than you received.
3493+ /// you from forwarding more than you received. See
3494+ /// [`HTLCIntercepted::expected_outbound_amount_msat`] for more on forwarding a different amount
3495+ /// than expected.
34893496 ///
34903497 /// Errors if the event was not handled in time, in which case the HTLC was automatically failed
34913498 /// backwards.
34923499 ///
34933500 /// [`UserConfig::accept_intercept_htlcs`]: crate::util::config::UserConfig::accept_intercept_htlcs
34943501 /// [`HTLCIntercepted`]: events::Event::HTLCIntercepted
3502+ /// [`HTLCIntercepted::expected_outbound_amount_msat`]: events::Event::HTLCIntercepted::expected_outbound_amount_msat
34953503 // TODO: when we move to deciding the best outbound channel at forward time, only take
34963504 // `next_node_id` and not `next_hop_channel_id`
34973505 pub fn forward_intercepted_htlc ( & self , intercept_id : InterceptId , next_hop_channel_id : & [ u8 ; 32 ] , next_node_id : PublicKey , amt_to_forward_msat : u64 ) -> Result < ( ) , APIError > {
@@ -3530,7 +3538,10 @@ where
35303538 } ,
35313539 _ => unreachable ! ( ) // Only `PendingHTLCRouting::Forward`s are intercepted
35323540 } ;
3541+ let skimmed_fee_msat =
3542+ payment. forward_info . outgoing_amt_msat . saturating_sub ( amt_to_forward_msat) ;
35333543 let pending_htlc_info = PendingHTLCInfo {
3544+ skimmed_fee_msat : if skimmed_fee_msat == 0 { None } else { Some ( skimmed_fee_msat) } ,
35343545 outgoing_amt_msat : amt_to_forward_msat, routing, ..payment. forward_info
35353546 } ;
35363547
@@ -3600,7 +3611,7 @@ where
36003611 prev_short_channel_id, prev_htlc_id, prev_funding_outpoint, prev_user_channel_id,
36013612 forward_info: PendingHTLCInfo {
36023613 routing, incoming_shared_secret, payment_hash, outgoing_amt_msat,
3603- outgoing_cltv_value, incoming_amt_msat : _
3614+ outgoing_cltv_value, ..
36043615 }
36053616 } ) => {
36063617 macro_rules! failure_handler {
@@ -3713,7 +3724,7 @@ where
37133724 prev_short_channel_id, prev_htlc_id, prev_funding_outpoint, prev_user_channel_id : _,
37143725 forward_info : PendingHTLCInfo {
37153726 incoming_shared_secret, payment_hash, outgoing_amt_msat, outgoing_cltv_value,
3716- routing : PendingHTLCRouting :: Forward { onion_packet, .. } , incoming_amt_msat : _ ,
3727+ routing : PendingHTLCRouting :: Forward { onion_packet, .. } , ..
37173728 } ,
37183729 } ) => {
37193730 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) ;
@@ -7448,6 +7459,7 @@ impl_writeable_tlv_based!(PendingHTLCInfo, {
74487459 ( 6 , outgoing_amt_msat, required) ,
74497460 ( 8 , outgoing_cltv_value, required) ,
74507461 ( 9 , incoming_amt_msat, option) ,
7462+ ( 10 , skimmed_fee_msat, option) ,
74517463} ) ;
74527464
74537465
0 commit comments