@@ -145,7 +145,6 @@ use crate::prelude::*;
145
145
use lightning:: ln:: { PaymentHash , PaymentPreimage , PaymentSecret } ;
146
146
use lightning:: ln:: channelmanager:: { ChannelDetails , PaymentId , PaymentSendFailure } ;
147
147
use lightning:: ln:: msgs:: LightningError ;
148
- use lightning:: routing:: gossip:: NodeId ;
149
148
use lightning:: routing:: router:: { InFlightHtlcs , PaymentParameters , Route , RouteHop , RouteParameters , Router } ;
150
149
use lightning:: util:: errors:: APIError ;
151
150
use lightning:: util:: events:: { Event , EventHandler } ;
@@ -712,38 +711,15 @@ where
712
711
/// This function should be called whenever we need information about currently used up liquidity
713
712
/// across payments.
714
713
fn create_inflight_map ( & self ) -> InFlightHtlcs {
715
- let mut total_inflight_map: HashMap < ( u64 , bool ) , u64 > = HashMap :: new ( ) ;
716
- // Make an attempt at finding existing payment information from `payment_cache`. If it
717
- // does not exist, it probably is a fresh payment and we can just return an empty
718
- // HashMap.
714
+ let mut total_inflight_map = InFlightHtlcs :: new ( ) ;
715
+ // Make an attempt at finding existing payment information from `payment_cache`.
719
716
for payment_info in self . payment_cache . lock ( ) . unwrap ( ) . values ( ) {
720
717
for path in & payment_info. paths {
721
- if path. is_empty ( ) { break } ;
722
- // total_inflight_map needs to be direction-sensitive when keeping track of the HTLC value
723
- // that is held up. However, the `hops` array, which is a path returned by `find_route` in
724
- // the router excludes the payer node. In the following lines, the payer's information is
725
- // hardcoded with an inflight value of 0 so that we can correctly represent the first hop
726
- // in our sliding window of two.
727
- let our_node_id: PublicKey = self . payer . node_id ( ) ;
728
- let reversed_hops_with_payer = path. iter ( ) . rev ( ) . skip ( 1 )
729
- . map ( |hop| hop. pubkey )
730
- . chain ( core:: iter:: once ( our_node_id) ) ;
731
- let mut cumulative_msat = 0 ;
732
-
733
- // Taking the reversed vector from above, we zip it with just the reversed hops list to
734
- // work "backwards" of the given path, since the last hop's `fee_msat` actually represents
735
- // the total amount sent.
736
- for ( next_hop, prev_hop) in path. iter ( ) . rev ( ) . zip ( reversed_hops_with_payer) {
737
- cumulative_msat += next_hop. fee_msat ;
738
- total_inflight_map
739
- . entry ( ( next_hop. short_channel_id , NodeId :: from_pubkey ( & prev_hop) < NodeId :: from_pubkey ( & next_hop. pubkey ) ) )
740
- . and_modify ( |used_liquidity_msat| * used_liquidity_msat += cumulative_msat)
741
- . or_insert ( cumulative_msat) ;
742
- }
718
+ total_inflight_map. process_path ( path, self . payer . node_id ( ) ) ;
743
719
}
744
720
}
745
721
746
- InFlightHtlcs :: new ( total_inflight_map)
722
+ total_inflight_map
747
723
}
748
724
}
749
725
0 commit comments