@@ -2223,17 +2223,26 @@ macro_rules! expect_payment_path_successful {
22232223 }
22242224}
22252225
2226+ /// Returns the total fee earned by this HTLC forward, in msat.
22262227pub fn expect_payment_forwarded < CM : AChannelManager , H : NodeHolder < CM =CM > > (
22272228 event : Event , node : & H , prev_node : & H , next_node : & H , expected_fee : Option < u64 > ,
22282229 expected_extra_fees_msat : Option < u64 > , upstream_force_closed : bool ,
2229- downstream_force_closed : bool
2230- ) {
2230+ downstream_force_closed : bool , allow_1_msat_fee_overpay : bool ,
2231+ ) -> Option < u64 > {
22312232 match event {
22322233 Event :: PaymentForwarded {
22332234 total_fee_earned_msat, prev_channel_id, claim_from_onchain_tx, next_channel_id,
22342235 outbound_amount_forwarded_msat : _, skimmed_fee_msat
22352236 } => {
2236- assert_eq ! ( total_fee_earned_msat, expected_fee) ;
2237+ if allow_1_msat_fee_overpay {
2238+ // Aggregating fees for blinded paths may result in a rounding error, causing slight
2239+ // overpayment in fees.
2240+ let actual_fee = total_fee_earned_msat. unwrap ( ) ;
2241+ let expected_fee = expected_fee. unwrap ( ) ;
2242+ assert ! ( actual_fee == expected_fee || actual_fee == expected_fee + 1 ) ;
2243+ } else {
2244+ assert_eq ! ( total_fee_earned_msat, expected_fee) ;
2245+ }
22372246
22382247 // Check that the (knowingly) withheld amount is always less or equal to the expected
22392248 // overpaid amount.
@@ -2248,6 +2257,7 @@ pub fn expect_payment_forwarded<CM: AChannelManager, H: NodeHolder<CM=CM>>(
22482257 assert ! ( node. node( ) . list_channels( ) . iter( ) . any( |x| x. counterparty. node_id == next_node. node( ) . get_our_node_id( ) && x. channel_id == next_channel_id. unwrap( ) ) ) ;
22492258 }
22502259 assert_eq ! ( claim_from_onchain_tx, downstream_force_closed) ;
2260+ total_fee_earned_msat
22512261 } ,
22522262 _ => panic ! ( "Unexpected event" ) ,
22532263 }
@@ -2260,7 +2270,7 @@ macro_rules! expect_payment_forwarded {
22602270 assert_eq!( events. len( ) , 1 ) ;
22612271 $crate:: ln:: functional_test_utils:: expect_payment_forwarded(
22622272 events. pop( ) . unwrap( ) , & $node, & $prev_node, & $next_node, $expected_fee, None ,
2263- $upstream_force_closed, $downstream_force_closed
2273+ $upstream_force_closed, $downstream_force_closed, false
22642274 ) ;
22652275 }
22662276}
@@ -2814,7 +2824,7 @@ pub fn pass_claimed_payment_along_route<'a, 'b, 'c, 'd>(args: ClaimAlongRouteArg
28142824 let mut events = $node. node. get_and_clear_pending_events( ) ;
28152825 assert_eq!( events. len( ) , 1 ) ;
28162826 expect_payment_forwarded( events. pop( ) . unwrap( ) , * $node, $next_node, $prev_node,
2817- Some ( fee as u64 ) , expected_extra_fee, false , false ) ;
2827+ Some ( fee as u64 ) , expected_extra_fee, false , false , false ) ;
28182828 expected_total_fee_msat += fee as u64 ;
28192829 fwd_amt_msat += fee as u64 ;
28202830 check_added_monitors!( $node, 1 ) ;
0 commit comments