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