@@ -1065,7 +1065,9 @@ impl<T: Time> ChannelLiquidity<T> {
10651065		} 
10661066	} 
10671067
1068- 	fn  decayed_offset ( & self ,  offset :  u64 ,  decay_params :  ProbabilisticScoringDecayParameters )  -> u64  { 
1068+ 	fn  decayed_offset ( & self ,  offset :  u64 ,  duration_since_epoch :  Duration , 
1069+ 		decay_params :  ProbabilisticScoringDecayParameters 
1070+ 	)  -> u64  { 
10691071		let  half_life = decay_params. liquidity_offset_half_life . as_secs ( ) ; 
10701072		if  half_life != 0  { 
10711073			let  elapsed_time = T :: now ( ) . duration_since ( self . last_updated ) . as_secs ( )  as  f64 ; 
@@ -1267,44 +1269,50 @@ impl<L: Deref<Target = u64>, BRT: Deref<Target = HistoricalBucketRangeTracker>,
12671269
12681270impl < L :  DerefMut < Target  = u64 > ,  BRT :  DerefMut < Target  = HistoricalBucketRangeTracker > ,  T :  Time ,  U :  DerefMut < Target  = T > >  DirectedChannelLiquidity < L ,  BRT ,  T ,  U >  { 
12691271	/// Adjusts the channel liquidity balance bounds when failing to route `amount_msat`. 
1270-  	fn  failed_at_channel < Log :  Deref > ( & mut  self ,  amount_msat :  u64 ,  chan_descr :  fmt:: Arguments ,  logger :  & Log )  where  Log :: Target :  Logger  { 
1272+  	fn  failed_at_channel < Log :  Deref > ( 
1273+ 		& mut  self ,  amount_msat :  u64 ,  duration_since_epoch :  Duration ,  chan_descr :  fmt:: Arguments ,  logger :  & Log 
1274+ 	)  where  Log :: Target :  Logger  { 
12711275		let  existing_max_msat = self . max_liquidity_msat ( ) ; 
12721276		if  amount_msat < existing_max_msat { 
12731277			log_debug ! ( logger,  "Setting max liquidity of {} from {} to {}" ,  chan_descr,  existing_max_msat,  amount_msat) ; 
1274- 			self . set_max_liquidity_msat ( amount_msat) ; 
1278+ 			self . set_max_liquidity_msat ( amount_msat,  duration_since_epoch ) ; 
12751279		}  else  { 
12761280			log_trace ! ( logger,  "Max liquidity of {} is {} (already less than or equal to {})" , 
12771281				chan_descr,  existing_max_msat,  amount_msat) ; 
12781282		} 
1279- 		self . update_history_buckets ( 0 ) ; 
1283+ 		self . update_history_buckets ( 0 ,  duration_since_epoch ) ; 
12801284	} 
12811285
12821286	/// Adjusts the channel liquidity balance bounds when failing to route `amount_msat` downstream. 
1283-  	fn  failed_downstream < Log :  Deref > ( & mut  self ,  amount_msat :  u64 ,  chan_descr :  fmt:: Arguments ,  logger :  & Log )  where  Log :: Target :  Logger  { 
1287+  	fn  failed_downstream < Log :  Deref > ( 
1288+ 		& mut  self ,  amount_msat :  u64 ,  duration_since_epoch :  Duration ,  chan_descr :  fmt:: Arguments ,  logger :  & Log 
1289+ 	)  where  Log :: Target :  Logger  { 
12841290		let  existing_min_msat = self . min_liquidity_msat ( ) ; 
12851291		if  amount_msat > existing_min_msat { 
12861292			log_debug ! ( logger,  "Setting min liquidity of {} from {} to {}" ,  existing_min_msat,  chan_descr,  amount_msat) ; 
1287- 			self . set_min_liquidity_msat ( amount_msat) ; 
1293+ 			self . set_min_liquidity_msat ( amount_msat,  duration_since_epoch ) ; 
12881294		}  else  { 
12891295			log_trace ! ( logger,  "Min liquidity of {} is {} (already greater than or equal to {})" , 
12901296				chan_descr,  existing_min_msat,  amount_msat) ; 
12911297		} 
1292- 		self . update_history_buckets ( 0 ) ; 
1298+ 		self . update_history_buckets ( 0 ,  duration_since_epoch ) ; 
12931299	} 
12941300
12951301	/// Adjusts the channel liquidity balance bounds when successfully routing `amount_msat`. 
1296-  	fn  successful < Log :  Deref > ( & mut  self ,  amount_msat :  u64 ,  chan_descr :  fmt:: Arguments ,  logger :  & Log )  where  Log :: Target :  Logger  { 
1302+  	fn  successful < Log :  Deref > ( & mut  self , 
1303+ 		amount_msat :  u64 ,  duration_since_epoch :  Duration ,  chan_descr :  fmt:: Arguments ,  logger :  & Log 
1304+ 	)  where  Log :: Target :  Logger  { 
12971305		let  max_liquidity_msat = self . max_liquidity_msat ( ) . checked_sub ( amount_msat) . unwrap_or ( 0 ) ; 
12981306		log_debug ! ( logger,  "Subtracting {} from max liquidity of {} (setting it to {})" ,  amount_msat,  chan_descr,  max_liquidity_msat) ; 
1299- 		self . set_max_liquidity_msat ( max_liquidity_msat) ; 
1300- 		self . update_history_buckets ( amount_msat) ; 
1307+ 		self . set_max_liquidity_msat ( max_liquidity_msat,  duration_since_epoch ) ; 
1308+ 		self . update_history_buckets ( amount_msat,  duration_since_epoch ) ; 
13011309	} 
13021310
13031311	/// Updates the history buckets for this channel. Because the history buckets track what we now 
13041312 	/// know about the channel's state *prior to our payment* (i.e. what we assume is "steady 
13051313 	/// state"), we allow the caller to set an offset applied to our liquidity bounds which 
13061314 	/// represents the amount of the successful payment we just made. 
1307-  	fn  update_history_buckets ( & mut  self ,  bucket_offset_msat :  u64 )  { 
1315+  	fn  update_history_buckets ( & mut  self ,  bucket_offset_msat :  u64 ,   duration_since_epoch :   Duration )  { 
13081316		let  half_lives = self . now . duration_since ( * self . offset_history_last_updated ) . as_secs ( ) 
13091317			. checked_div ( self . decay_params . historical_no_updates_half_life . as_secs ( ) ) 
13101318			. map ( |v| v. try_into ( ) . unwrap_or ( u32:: max_value ( ) ) ) . unwrap_or ( u32:: max_value ( ) ) ; 
@@ -1322,7 +1330,7 @@ impl<L: DerefMut<Target = u64>, BRT: DerefMut<Target = HistoricalBucketRangeTrac
13221330	} 
13231331
13241332	/// Adjusts the lower bound of the channel liquidity balance in this direction. 
1325-  	fn  set_min_liquidity_msat ( & mut  self ,  amount_msat :  u64 )  { 
1333+  	fn  set_min_liquidity_msat ( & mut  self ,  amount_msat :  u64 ,   duration_since_epoch :   Duration )  { 
13261334		* self . min_liquidity_offset_msat  = amount_msat; 
13271335		* self . max_liquidity_offset_msat  = if  amount_msat > self . max_liquidity_msat ( )  { 
13281336			0 
@@ -1334,7 +1342,7 @@ impl<L: DerefMut<Target = u64>, BRT: DerefMut<Target = HistoricalBucketRangeTrac
13341342	} 
13351343
13361344	/// Adjusts the upper bound of the channel liquidity balance in this direction. 
1337-  	fn  set_max_liquidity_msat ( & mut  self ,  amount_msat :  u64 )  { 
1345+  	fn  set_max_liquidity_msat ( & mut  self ,  amount_msat :  u64 ,   duration_since_epoch :   Duration )  { 
13381346		* self . max_liquidity_offset_msat  = self . capacity_msat . checked_sub ( amount_msat) . unwrap_or ( 0 ) ; 
13391347		* self . min_liquidity_offset_msat  = if  amount_msat < self . min_liquidity_msat ( )  { 
13401348			0 
@@ -1391,7 +1399,7 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, T: Time> ScoreLookUp for Prob
13911399} 
13921400
13931401impl < G :  Deref < Target  = NetworkGraph < L > > ,  L :  Deref ,  T :  Time >  ScoreUpdate  for  ProbabilisticScorerUsingTime < G ,  L ,  T >  where  L :: Target :  Logger  { 
1394- 	fn  payment_path_failed ( & mut  self ,  path :  & Path ,  short_channel_id :  u64 ,  _duration_since_epoch :  Duration )  { 
1402+ 	fn  payment_path_failed ( & mut  self ,  path :  & Path ,  short_channel_id :  u64 ,  duration_since_epoch :  Duration )  { 
13951403		let  amount_msat = path. final_value_msat ( ) ; 
13961404		log_trace ! ( self . logger,  "Scoring path through to SCID {} as having failed at {} msat" ,  short_channel_id,  amount_msat) ; 
13971405		let  network_graph = self . network_graph . read_only ( ) ; 
@@ -1414,13 +1422,15 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, T: Time> ScoreUpdate for Prob
14141422						. entry ( hop. short_channel_id ) 
14151423						. or_insert_with ( ChannelLiquidity :: new) 
14161424						. as_directed_mut ( source,  & target,  capacity_msat,  self . decay_params ) 
1417- 						. failed_at_channel ( amount_msat,  format_args ! ( "SCID {}, towards {:?}" ,  hop. short_channel_id,  target) ,  & self . logger ) ; 
1425+ 						. failed_at_channel ( amount_msat,  duration_since_epoch, 
1426+ 							format_args ! ( "SCID {}, towards {:?}" ,  hop. short_channel_id,  target) ,  & self . logger ) ; 
14181427				}  else  { 
14191428					self . channel_liquidities 
14201429						. entry ( hop. short_channel_id ) 
14211430						. or_insert_with ( ChannelLiquidity :: new) 
14221431						. as_directed_mut ( source,  & target,  capacity_msat,  self . decay_params ) 
1423- 						. failed_downstream ( amount_msat,  format_args ! ( "SCID {}, towards {:?}" ,  hop. short_channel_id,  target) ,  & self . logger ) ; 
1432+ 						. failed_downstream ( amount_msat,  duration_since_epoch, 
1433+ 							format_args ! ( "SCID {}, towards {:?}" ,  hop. short_channel_id,  target) ,  & self . logger ) ; 
14241434				} 
14251435			}  else  { 
14261436				log_debug ! ( self . logger,  "Not able to penalize channel with SCID {} as we do not have graph info for it (likely a route-hint last-hop)." , 
@@ -1430,7 +1440,7 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, T: Time> ScoreUpdate for Prob
14301440		} 
14311441	} 
14321442
1433- 	fn  payment_path_successful ( & mut  self ,  path :  & Path ,  _duration_since_epoch :  Duration )  { 
1443+ 	fn  payment_path_successful ( & mut  self ,  path :  & Path ,  duration_since_epoch :  Duration )  { 
14341444		let  amount_msat = path. final_value_msat ( ) ; 
14351445		log_trace ! ( self . logger,  "Scoring path through SCID {} as having succeeded at {} msat." , 
14361446			path. hops. split_last( ) . map( |( hop,  _) | hop. short_channel_id) . unwrap_or( 0 ) ,  amount_msat) ; 
@@ -1448,7 +1458,8 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, T: Time> ScoreUpdate for Prob
14481458					. entry ( hop. short_channel_id ) 
14491459					. or_insert_with ( ChannelLiquidity :: new) 
14501460					. as_directed_mut ( source,  & target,  capacity_msat,  self . decay_params ) 
1451- 					. successful ( amount_msat,  format_args ! ( "SCID {}, towards {:?}" ,  hop. short_channel_id,  target) ,  & self . logger ) ; 
1461+ 					. successful ( amount_msat,  duration_since_epoch, 
1462+ 						format_args ! ( "SCID {}, towards {:?}" ,  hop. short_channel_id,  target) ,  & self . logger ) ; 
14521463			}  else  { 
14531464				log_debug ! ( self . logger,  "Not able to learn for channel with SCID {} as we do not have graph info for it (likely a route-hint last-hop)." , 
14541465					hop. short_channel_id) ; 
@@ -1464,12 +1475,15 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, T: Time> ScoreUpdate for Prob
14641475		self . payment_path_failed ( path,  u64:: max_value ( ) ,  duration_since_epoch) 
14651476	} 
14661477
1467- 	fn  decay_liquidity_certainty ( & mut  self ,  _duration_since_epoch :  Duration )  { 
1478+ 	fn  decay_liquidity_certainty ( & mut  self ,  duration_since_epoch :  Duration )  { 
14681479		let  decay_params = self . decay_params ; 
14691480		self . channel_liquidities . retain ( |_scid,  liquidity| { 
1470- 			liquidity. min_liquidity_offset_msat  = liquidity. decayed_offset ( liquidity. min_liquidity_offset_msat ,  decay_params) ; 
1471- 			liquidity. max_liquidity_offset_msat  = liquidity. decayed_offset ( liquidity. max_liquidity_offset_msat ,  decay_params) ; 
1481+ 			liquidity. min_liquidity_offset_msat  =
1482+ 				liquidity. decayed_offset ( liquidity. min_liquidity_offset_msat ,  duration_since_epoch,  decay_params) ; 
1483+ 			liquidity. max_liquidity_offset_msat  =
1484+ 				liquidity. decayed_offset ( liquidity. max_liquidity_offset_msat ,  duration_since_epoch,  decay_params) ; 
14721485			liquidity. last_updated  = T :: now ( ) ; 
1486+ 
14731487			let  elapsed_time =
14741488				T :: now ( ) . duration_since ( liquidity. offset_history_last_updated ) ; 
14751489			if  elapsed_time > decay_params. historical_no_updates_half_life  { 
@@ -2405,7 +2419,7 @@ mod tests {
24052419
24062420		scorer. channel_liquidities . get_mut ( & 42 ) . unwrap ( ) 
24072421			. as_directed_mut ( & source,  & target,  1_000 ,  decay_params) 
2408- 			. set_min_liquidity_msat ( 200 ) ; 
2422+ 			. set_min_liquidity_msat ( 200 ,   Duration :: ZERO ) ; 
24092423
24102424		let  liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( ) 
24112425			. as_directed ( & source,  & target,  1_000 ,  decay_params) ; 
@@ -2431,7 +2445,7 @@ mod tests {
24312445
24322446		scorer. channel_liquidities . get_mut ( & 43 ) . unwrap ( ) 
24332447			. as_directed_mut ( & target,  & recipient,  1_000 ,  decay_params) 
2434- 			. set_max_liquidity_msat ( 200 ) ; 
2448+ 			. set_max_liquidity_msat ( 200 ,   Duration :: ZERO ) ; 
24352449
24362450		let  liquidity = scorer. channel_liquidities . get ( & 43 ) . unwrap ( ) 
24372451			. as_directed ( & target,  & recipient,  1_000 ,  decay_params) ; 
@@ -2477,7 +2491,7 @@ mod tests {
24772491		// Reset from source to target. 
24782492		scorer. channel_liquidities . get_mut ( & 42 ) . unwrap ( ) 
24792493			. as_directed_mut ( & source,  & target,  1_000 ,  decay_params) 
2480- 			. set_min_liquidity_msat ( 900 ) ; 
2494+ 			. set_min_liquidity_msat ( 900 ,   Duration :: ZERO ) ; 
24812495
24822496		let  liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( ) 
24832497			. as_directed ( & source,  & target,  1_000 ,  decay_params) ; 
@@ -2492,7 +2506,7 @@ mod tests {
24922506		// Reset from target to source. 
24932507		scorer. channel_liquidities . get_mut ( & 42 ) . unwrap ( ) 
24942508			. as_directed_mut ( & target,  & source,  1_000 ,  decay_params) 
2495- 			. set_min_liquidity_msat ( 400 ) ; 
2509+ 			. set_min_liquidity_msat ( 400 ,   Duration :: ZERO ) ; 
24962510
24972511		let  liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( ) 
24982512			. as_directed ( & source,  & target,  1_000 ,  decay_params) ; 
@@ -2538,7 +2552,7 @@ mod tests {
25382552		// Reset from source to target. 
25392553		scorer. channel_liquidities . get_mut ( & 42 ) . unwrap ( ) 
25402554			. as_directed_mut ( & source,  & target,  1_000 ,  decay_params) 
2541- 			. set_max_liquidity_msat ( 300 ) ; 
2555+ 			. set_max_liquidity_msat ( 300 ,   Duration :: ZERO ) ; 
25422556
25432557		let  liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( ) 
25442558			. as_directed ( & source,  & target,  1_000 ,  decay_params) ; 
@@ -2553,7 +2567,7 @@ mod tests {
25532567		// Reset from target to source. 
25542568		scorer. channel_liquidities . get_mut ( & 42 ) . unwrap ( ) 
25552569			. as_directed_mut ( & target,  & source,  1_000 ,  decay_params) 
2556- 			. set_max_liquidity_msat ( 600 ) ; 
2570+ 			. set_max_liquidity_msat ( 600 ,   Duration :: ZERO ) ; 
25572571
25582572		let  liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( ) 
25592573			. as_directed ( & source,  & target,  1_000 ,  decay_params) ; 
0 commit comments