@@ -131,6 +131,9 @@ pub(super) struct PendingHTLCInfo {
131
131
/// may overshoot this in either case)
132
132
pub ( super ) outgoing_amt_msat : u64 ,
133
133
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 > ,
134
137
}
135
138
136
139
#[ derive( Clone ) ] // See Channel::revoke_and_ack for why, tl;dr: Rust bug
@@ -2616,6 +2619,7 @@ where
2616
2619
incoming_amt_msat : Some ( amt_msat) ,
2617
2620
outgoing_amt_msat : hop_data. amt_to_forward ,
2618
2621
outgoing_cltv_value : hop_data. outgoing_cltv_value ,
2622
+ skimmed_fee_msat : None ,
2619
2623
} )
2620
2624
}
2621
2625
@@ -2883,6 +2887,7 @@ where
2883
2887
incoming_amt_msat : Some ( msg. amount_msat ) ,
2884
2888
outgoing_amt_msat : next_hop_data. amt_to_forward ,
2885
2889
outgoing_cltv_value : next_hop_data. outgoing_cltv_value ,
2890
+ skimmed_fee_msat : None ,
2886
2891
} )
2887
2892
}
2888
2893
}
@@ -3523,7 +3528,10 @@ where
3523
3528
} ,
3524
3529
_ => unreachable ! ( ) // Only `PendingHTLCRouting::Forward`s are intercepted
3525
3530
} ;
3531
+ let skimmed_fee_msat =
3532
+ payment. forward_info . outgoing_amt_msat . saturating_sub ( amt_to_forward_msat) ;
3526
3533
let pending_htlc_info = PendingHTLCInfo {
3534
+ skimmed_fee_msat : if skimmed_fee_msat == 0 { None } else { Some ( skimmed_fee_msat) } ,
3527
3535
outgoing_amt_msat : amt_to_forward_msat, routing, ..payment. forward_info
3528
3536
} ;
3529
3537
@@ -3593,7 +3601,7 @@ where
3593
3601
prev_short_channel_id, prev_htlc_id, prev_funding_outpoint, prev_user_channel_id,
3594
3602
forward_info: PendingHTLCInfo {
3595
3603
routing, incoming_shared_secret, payment_hash, outgoing_amt_msat,
3596
- outgoing_cltv_value, incoming_amt_msat : _
3604
+ outgoing_cltv_value, ..
3597
3605
}
3598
3606
} ) => {
3599
3607
macro_rules! failure_handler {
@@ -3706,7 +3714,7 @@ where
3706
3714
prev_short_channel_id, prev_htlc_id, prev_funding_outpoint, prev_user_channel_id : _,
3707
3715
forward_info : PendingHTLCInfo {
3708
3716
incoming_shared_secret, payment_hash, outgoing_amt_msat, outgoing_cltv_value,
3709
- routing : PendingHTLCRouting :: Forward { onion_packet, .. } , incoming_amt_msat : _ ,
3717
+ routing : PendingHTLCRouting :: Forward { onion_packet, .. } , ..
3710
3718
} ,
3711
3719
} ) => {
3712
3720
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) ;
@@ -7441,6 +7449,7 @@ impl_writeable_tlv_based!(PendingHTLCInfo, {
7441
7449
( 6 , outgoing_amt_msat, required) ,
7442
7450
( 8 , outgoing_cltv_value, required) ,
7443
7451
( 9 , incoming_amt_msat, option) ,
7452
+ ( 10 , skimmed_fee_msat, option) ,
7444
7453
} ) ;
7445
7454
7446
7455
0 commit comments