@@ -104,6 +104,9 @@ pub(super) enum PendingHTLCRouting {
104
104
/// The SCID from the onion that we should forward to. This could be a real SCID or a fake one
105
105
/// generated using `get_fake_scid` from the scid_utils::fake_scid module.
106
106
short_channel_id : u64 , // This should be NonZero<u64> eventually when we bump MSRV
107
+ /// The fee we're skimming off the top of this HTLC. See
108
+ /// [`ChannelConfig::accept_underpaying_htlcs`].
109
+ skimmed_fee_msat : Option < u64 > ,
107
110
} ,
108
111
Receive {
109
112
payment_data : msgs:: FinalOnionHopData ,
@@ -2764,6 +2767,7 @@ where
2764
2767
routing : PendingHTLCRouting :: Forward {
2765
2768
onion_packet : outgoing_packet,
2766
2769
short_channel_id,
2770
+ skimmed_fee_msat : None ,
2767
2771
} ,
2768
2772
payment_hash : msg. payment_hash . clone ( ) ,
2769
2773
incoming_shared_secret : shared_secret,
@@ -3402,8 +3406,16 @@ where
3402
3406
} ) ?;
3403
3407
3404
3408
let routing = match payment. forward_info . routing {
3405
- PendingHTLCRouting :: Forward { onion_packet, .. } => {
3406
- PendingHTLCRouting :: Forward { onion_packet, short_channel_id : next_hop_scid }
3409
+ PendingHTLCRouting :: Forward { onion_packet, skimmed_fee_msat, .. } => {
3410
+ debug_assert ! ( skimmed_fee_msat. is_none( ) ) ;
3411
+ PendingHTLCRouting :: Forward {
3412
+ onion_packet,
3413
+ short_channel_id : next_hop_scid,
3414
+ skimmed_fee_msat :
3415
+ // The minuend here must match the expected forward amount generated for the
3416
+ // HTLCIntercepted event.
3417
+ Some ( payment. forward_info . outgoing_amt_msat . saturating_sub ( amt_to_forward_msat) ) ,
3418
+ }
3407
3419
} ,
3408
3420
_ => unreachable ! ( ) // Only `PendingHTLCRouting::Forward`s are intercepted
3409
3421
} ;
@@ -7311,6 +7323,7 @@ impl_writeable_tlv_based!(PhantomRouteHints, {
7311
7323
impl_writeable_tlv_based_enum ! ( PendingHTLCRouting ,
7312
7324
( 0 , Forward ) => {
7313
7325
( 0 , onion_packet, required) ,
7326
+ ( 1 , skimmed_fee_msat, option) ,
7314
7327
( 2 , short_channel_id, required) ,
7315
7328
} ,
7316
7329
( 1 , Receive ) => {
0 commit comments