@@ -2671,6 +2671,14 @@ pub struct ClaimAlongRouteArgs<'a, 'b, 'c, 'd> {
2671
2671
pub expected_min_htlc_overpay : Vec < u32 > ,
2672
2672
pub skip_last : bool ,
2673
2673
pub payment_preimage : PaymentPreimage ,
2674
+ // Allow forwarding nodes to have taken 1 msat more fee than expected based on the downstream
2675
+ // fulfill amount.
2676
+ //
2677
+ // Necessary because our test utils calculate the expected fee for an intermediate node based on
2678
+ // the amount was claimed in their downstream peer's fulfill, but blinded intermediate nodes
2679
+ // calculate their fee based on the inbound amount from their upstream peer, causing a difference
2680
+ // in rounding.
2681
+ pub allow_1_msat_fee_overpay : bool ,
2674
2682
}
2675
2683
2676
2684
impl < ' a , ' b , ' c , ' d > ClaimAlongRouteArgs < ' a , ' b , ' c , ' d > {
@@ -2681,6 +2689,7 @@ impl<'a, 'b, 'c, 'd> ClaimAlongRouteArgs<'a, 'b, 'c, 'd> {
2681
2689
Self {
2682
2690
origin_node, expected_paths, expected_extra_fees : vec ! [ 0 ; expected_paths. len( ) ] ,
2683
2691
expected_min_htlc_overpay : vec ! [ 0 ; expected_paths. len( ) ] , skip_last : false , payment_preimage,
2692
+ allow_1_msat_fee_overpay : false ,
2684
2693
}
2685
2694
}
2686
2695
pub fn skip_last ( mut self , skip_last : bool ) -> Self {
@@ -2695,12 +2704,16 @@ impl<'a, 'b, 'c, 'd> ClaimAlongRouteArgs<'a, 'b, 'c, 'd> {
2695
2704
self . expected_min_htlc_overpay = extra_fees;
2696
2705
self
2697
2706
}
2707
+ pub fn allow_1_msat_fee_overpay ( mut self ) -> Self {
2708
+ self . allow_1_msat_fee_overpay = true ;
2709
+ self
2710
+ }
2698
2711
}
2699
2712
2700
2713
pub fn pass_claimed_payment_along_route < ' a , ' b , ' c , ' d > ( args : ClaimAlongRouteArgs ) -> u64 {
2701
2714
let ClaimAlongRouteArgs {
2702
2715
origin_node, expected_paths, expected_extra_fees, expected_min_htlc_overpay, skip_last,
2703
- payment_preimage : our_payment_preimage
2716
+ payment_preimage : our_payment_preimage, allow_1_msat_fee_overpay ,
2704
2717
} = args;
2705
2718
let claim_event = expected_paths[ 0 ] . last ( ) . unwrap ( ) . node . get_and_clear_pending_events ( ) ;
2706
2719
assert_eq ! ( claim_event. len( ) , 1 ) ;
@@ -2820,10 +2833,10 @@ pub fn pass_claimed_payment_along_route<'a, 'b, 'c, 'd>(args: ClaimAlongRouteArg
2820
2833
}
2821
2834
let mut events = $node. node. get_and_clear_pending_events( ) ;
2822
2835
assert_eq!( events. len( ) , 1 ) ;
2823
- expect_payment_forwarded( events. pop( ) . unwrap( ) , * $node, $next_node, $prev_node,
2824
- Some ( fee as u64 ) , expected_extra_fee, false , false , false ) ;
2825
- expected_total_fee_msat += fee as u64 ;
2826
- fwd_amt_msat += fee as u64 ;
2836
+ let actual_fee = expect_payment_forwarded( events. pop( ) . unwrap( ) , * $node, $next_node, $prev_node,
2837
+ Some ( fee as u64 ) , expected_extra_fee, false , false , allow_1_msat_fee_overpay ) ;
2838
+ expected_total_fee_msat += actual_fee . unwrap ( ) ;
2839
+ fwd_amt_msat += actual_fee . unwrap ( ) ;
2827
2840
check_added_monitors!( $node, 1 ) ;
2828
2841
let new_next_msgs = if $new_msgs {
2829
2842
let events = $node. node. get_and_clear_pending_msg_events( ) ;
0 commit comments