@@ -790,8 +790,7 @@ struct ChannelLiquidity {
790790 /// Upper channel liquidity bound in terms of an offset from the effective capacity.
791791 max_liquidity_offset_msat : u64 ,
792792
793- min_liquidity_offset_history : HistoricalBucketRangeTracker ,
794- max_liquidity_offset_history : HistoricalBucketRangeTracker ,
793+ liquidity_history : HistoricalLiquidityTracker ,
795794
796795 /// Time when either liquidity bound was last modified as an offset since the unix epoch.
797796 last_updated : Duration ,
@@ -982,8 +981,7 @@ impl ChannelLiquidity {
982981 Self {
983982 min_liquidity_offset_msat : 0 ,
984983 max_liquidity_offset_msat : 0 ,
985- min_liquidity_offset_history : HistoricalBucketRangeTracker :: new ( ) ,
986- max_liquidity_offset_history : HistoricalBucketRangeTracker :: new ( ) ,
984+ liquidity_history : HistoricalLiquidityTracker :: new ( ) ,
987985 last_updated,
988986 offset_history_last_updated : last_updated,
989987 }
@@ -994,22 +992,18 @@ impl ChannelLiquidity {
994992 fn as_directed (
995993 & self , source : & NodeId , target : & NodeId , capacity_msat : u64 ,
996994 ) -> DirectedChannelLiquidity < & u64 , & HistoricalBucketRangeTracker , & Duration > {
997- let ( min_liquidity_offset_msat , max_liquidity_offset_msat , min_liquidity_offset_history , max_liquidity_offset_history ) =
998- if source < target {
999- ( & self . min_liquidity_offset_msat , & self . max_liquidity_offset_msat ,
1000- & self . min_liquidity_offset_history , & self . max_liquidity_offset_history )
995+ let source_less_than_target = source < target ;
996+ let ( min_liquidity_offset_msat , max_liquidity_offset_msat ) =
997+ if source_less_than_target {
998+ ( & self . min_liquidity_offset_msat , & self . max_liquidity_offset_msat )
1001999 } else {
1002- ( & self . max_liquidity_offset_msat , & self . min_liquidity_offset_msat ,
1003- & self . max_liquidity_offset_history , & self . min_liquidity_offset_history )
1000+ ( & self . max_liquidity_offset_msat , & self . min_liquidity_offset_msat )
10041001 } ;
10051002
10061003 DirectedChannelLiquidity {
10071004 min_liquidity_offset_msat,
10081005 max_liquidity_offset_msat,
1009- liquidity_history : HistoricalMinMaxBuckets {
1010- min_liquidity_offset_history,
1011- max_liquidity_offset_history,
1012- } ,
1006+ liquidity_history : self . liquidity_history . as_directed ( source_less_than_target) ,
10131007 capacity_msat,
10141008 last_updated : & self . last_updated ,
10151009 offset_history_last_updated : & self . offset_history_last_updated ,
@@ -1021,22 +1015,18 @@ impl ChannelLiquidity {
10211015 fn as_directed_mut (
10221016 & mut self , source : & NodeId , target : & NodeId , capacity_msat : u64 ,
10231017 ) -> DirectedChannelLiquidity < & mut u64 , & mut HistoricalBucketRangeTracker , & mut Duration > {
1024- let ( min_liquidity_offset_msat , max_liquidity_offset_msat , min_liquidity_offset_history , max_liquidity_offset_history ) =
1025- if source < target {
1026- ( & mut self . min_liquidity_offset_msat , & mut self . max_liquidity_offset_msat ,
1027- & mut self . min_liquidity_offset_history , & mut self . max_liquidity_offset_history )
1018+ let source_less_than_target = source < target ;
1019+ let ( min_liquidity_offset_msat , max_liquidity_offset_msat ) =
1020+ if source_less_than_target {
1021+ ( & mut self . min_liquidity_offset_msat , & mut self . max_liquidity_offset_msat )
10281022 } else {
1029- ( & mut self . max_liquidity_offset_msat , & mut self . min_liquidity_offset_msat ,
1030- & mut self . max_liquidity_offset_history , & mut self . min_liquidity_offset_history )
1023+ ( & mut self . max_liquidity_offset_msat , & mut self . min_liquidity_offset_msat )
10311024 } ;
10321025
10331026 DirectedChannelLiquidity {
10341027 min_liquidity_offset_msat,
10351028 max_liquidity_offset_msat,
1036- liquidity_history : HistoricalMinMaxBuckets {
1037- min_liquidity_offset_history,
1038- max_liquidity_offset_history,
1039- } ,
1029+ liquidity_history : self . liquidity_history . as_directed_mut ( source_less_than_target) ,
10401030 capacity_msat,
10411031 last_updated : & mut self . last_updated ,
10421032 offset_history_last_updated : & mut self . offset_history_last_updated ,
@@ -1462,18 +1452,18 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref> ScoreUpdate for Probabilistic
14621452 let half_life = decay_params. historical_no_updates_half_life . as_secs_f64 ( ) ;
14631453 if half_life != 0.0 {
14641454 let divisor = powf64 ( 2048.0 , elapsed_time. as_secs_f64 ( ) / half_life) as u64 ;
1465- for bucket in liquidity. min_liquidity_offset_history . buckets . iter_mut ( ) {
1455+ for bucket in liquidity. liquidity_history . min_liquidity_offset_history . buckets . iter_mut ( ) {
14661456 * bucket = ( ( * bucket as u64 ) * 1024 / divisor) as u16 ;
14671457 }
1468- for bucket in liquidity. max_liquidity_offset_history . buckets . iter_mut ( ) {
1458+ for bucket in liquidity. liquidity_history . max_liquidity_offset_history . buckets . iter_mut ( ) {
14691459 * bucket = ( ( * bucket as u64 ) * 1024 / divisor) as u16 ;
14701460 }
14711461 liquidity. offset_history_last_updated = duration_since_epoch;
14721462 }
14731463 }
14741464 liquidity. min_liquidity_offset_msat != 0 || liquidity. max_liquidity_offset_msat != 0 ||
1475- liquidity. min_liquidity_offset_history . buckets != [ 0 ; 32 ] ||
1476- liquidity. max_liquidity_offset_history . buckets != [ 0 ; 32 ]
1465+ liquidity. liquidity_history . min_liquidity_offset_history . buckets != [ 0 ; 32 ] ||
1466+ liquidity. liquidity_history . max_liquidity_offset_history . buckets != [ 0 ; 32 ]
14771467 } ) ;
14781468 }
14791469}
@@ -1648,6 +1638,54 @@ mod bucketed_history {
16481638 impl_writeable_tlv_based ! ( HistoricalBucketRangeTracker , { ( 0 , buckets, required) } ) ;
16491639 impl_writeable_tlv_based ! ( LegacyHistoricalBucketRangeTracker , { ( 0 , buckets, required) } ) ;
16501640
1641+
1642+ #[ derive( Clone , Copy ) ]
1643+ pub ( super ) struct HistoricalLiquidityTracker {
1644+ pub ( super ) min_liquidity_offset_history : HistoricalBucketRangeTracker ,
1645+ pub ( super ) max_liquidity_offset_history : HistoricalBucketRangeTracker ,
1646+ }
1647+
1648+ impl HistoricalLiquidityTracker {
1649+ pub ( super ) fn new ( ) -> HistoricalLiquidityTracker {
1650+ HistoricalLiquidityTracker {
1651+ min_liquidity_offset_history : HistoricalBucketRangeTracker :: new ( ) ,
1652+ max_liquidity_offset_history : HistoricalBucketRangeTracker :: new ( ) ,
1653+ }
1654+ }
1655+
1656+ pub ( super ) fn from_min_max (
1657+ min_liquidity_offset_history : HistoricalBucketRangeTracker ,
1658+ max_liquidity_offset_history : HistoricalBucketRangeTracker ,
1659+ ) -> HistoricalLiquidityTracker {
1660+ HistoricalLiquidityTracker {
1661+ min_liquidity_offset_history,
1662+ max_liquidity_offset_history,
1663+ }
1664+ }
1665+
1666+ pub ( super ) fn as_directed < ' a > ( & ' a self , source_less_than_target : bool )
1667+ -> HistoricalMinMaxBuckets < & ' a HistoricalBucketRangeTracker > {
1668+ let ( min_liquidity_offset_history, max_liquidity_offset_history) =
1669+ if source_less_than_target {
1670+ ( & self . min_liquidity_offset_history , & self . max_liquidity_offset_history )
1671+ } else {
1672+ ( & self . max_liquidity_offset_history , & self . min_liquidity_offset_history )
1673+ } ;
1674+ HistoricalMinMaxBuckets { min_liquidity_offset_history, max_liquidity_offset_history }
1675+ }
1676+
1677+ pub ( super ) fn as_directed_mut < ' a > ( & ' a mut self , source_less_than_target : bool )
1678+ -> HistoricalMinMaxBuckets < & ' a mut HistoricalBucketRangeTracker > {
1679+ let ( min_liquidity_offset_history, max_liquidity_offset_history) =
1680+ if source_less_than_target {
1681+ ( & mut self . min_liquidity_offset_history , & mut self . max_liquidity_offset_history )
1682+ } else {
1683+ ( & mut self . max_liquidity_offset_history , & mut self . min_liquidity_offset_history )
1684+ } ;
1685+ HistoricalMinMaxBuckets { min_liquidity_offset_history, max_liquidity_offset_history }
1686+ }
1687+ }
1688+
16511689 /// A set of buckets representing the history of where we've seen the minimum- and maximum-
16521690 /// liquidity bounds for a given channel.
16531691 pub ( super ) struct HistoricalMinMaxBuckets < D : Deref < Target = HistoricalBucketRangeTracker > > {
@@ -1745,7 +1783,7 @@ mod bucketed_history {
17451783 }
17461784 }
17471785}
1748- use bucketed_history:: { LegacyHistoricalBucketRangeTracker , HistoricalBucketRangeTracker , HistoricalMinMaxBuckets } ;
1786+ use bucketed_history:: { LegacyHistoricalBucketRangeTracker , HistoricalBucketRangeTracker , HistoricalMinMaxBuckets , HistoricalLiquidityTracker } ;
17491787
17501788impl < G : Deref < Target = NetworkGraph < L > > , L : Deref > Writeable for ProbabilisticScorer < G , L > where L :: Target : Logger {
17511789 #[ inline]
@@ -1786,8 +1824,8 @@ impl Writeable for ChannelLiquidity {
17861824 ( 2 , self . max_liquidity_offset_msat, required) ,
17871825 // 3 was the max_liquidity_offset_history in octile form
17881826 ( 4 , self . last_updated, required) ,
1789- ( 5 , Some ( self . min_liquidity_offset_history) , option ) ,
1790- ( 7 , Some ( self . max_liquidity_offset_history) , option ) ,
1827+ ( 5 , self . liquidity_history . min_liquidity_offset_history, required ) ,
1828+ ( 7 , self . liquidity_history . max_liquidity_offset_history, required ) ,
17911829 ( 9 , self . offset_history_last_updated, required) ,
17921830 } ) ;
17931831 Ok ( ( ) )
@@ -1833,8 +1871,9 @@ impl Readable for ChannelLiquidity {
18331871 Ok ( Self {
18341872 min_liquidity_offset_msat,
18351873 max_liquidity_offset_msat,
1836- min_liquidity_offset_history : min_liquidity_offset_history. unwrap ( ) ,
1837- max_liquidity_offset_history : max_liquidity_offset_history. unwrap ( ) ,
1874+ liquidity_history : HistoricalLiquidityTracker :: from_min_max (
1875+ min_liquidity_offset_history. unwrap ( ) , max_liquidity_offset_history. unwrap ( )
1876+ ) ,
18381877 last_updated,
18391878 offset_history_last_updated : offset_history_last_updated. unwrap_or ( last_updated) ,
18401879 } )
@@ -1843,7 +1882,7 @@ impl Readable for ChannelLiquidity {
18431882
18441883#[ cfg( test) ]
18451884mod tests {
1846- use super :: { ChannelLiquidity , HistoricalBucketRangeTracker , ProbabilisticScoringFeeParameters , ProbabilisticScoringDecayParameters , ProbabilisticScorer } ;
1885+ use super :: { ChannelLiquidity , HistoricalLiquidityTracker , ProbabilisticScoringFeeParameters , ProbabilisticScoringDecayParameters , ProbabilisticScorer } ;
18471886 use crate :: blinded_path:: BlindedHop ;
18481887 use crate :: util:: config:: UserConfig ;
18491888
@@ -2016,15 +2055,13 @@ mod tests {
20162055 ChannelLiquidity {
20172056 min_liquidity_offset_msat : 700 , max_liquidity_offset_msat : 100 ,
20182057 last_updated, offset_history_last_updated,
2019- min_liquidity_offset_history : HistoricalBucketRangeTracker :: new ( ) ,
2020- max_liquidity_offset_history : HistoricalBucketRangeTracker :: new ( ) ,
2058+ liquidity_history : HistoricalLiquidityTracker :: new ( ) ,
20212059 } )
20222060 . with_channel ( 43 ,
20232061 ChannelLiquidity {
20242062 min_liquidity_offset_msat : 700 , max_liquidity_offset_msat : 100 ,
20252063 last_updated, offset_history_last_updated,
2026- min_liquidity_offset_history : HistoricalBucketRangeTracker :: new ( ) ,
2027- max_liquidity_offset_history : HistoricalBucketRangeTracker :: new ( ) ,
2064+ liquidity_history : HistoricalLiquidityTracker :: new ( ) ,
20282065 } ) ;
20292066 let source = source_node_id ( ) ;
20302067 let target = target_node_id ( ) ;
@@ -2097,8 +2134,7 @@ mod tests {
20972134 ChannelLiquidity {
20982135 min_liquidity_offset_msat : 200 , max_liquidity_offset_msat : 400 ,
20992136 last_updated, offset_history_last_updated,
2100- min_liquidity_offset_history : HistoricalBucketRangeTracker :: new ( ) ,
2101- max_liquidity_offset_history : HistoricalBucketRangeTracker :: new ( ) ,
2137+ liquidity_history : HistoricalLiquidityTracker :: new ( ) ,
21022138 } ) ;
21032139 let source = source_node_id ( ) ;
21042140 let target = target_node_id ( ) ;
@@ -2158,8 +2194,7 @@ mod tests {
21582194 ChannelLiquidity {
21592195 min_liquidity_offset_msat : 200 , max_liquidity_offset_msat : 400 ,
21602196 last_updated, offset_history_last_updated,
2161- min_liquidity_offset_history : HistoricalBucketRangeTracker :: new ( ) ,
2162- max_liquidity_offset_history : HistoricalBucketRangeTracker :: new ( ) ,
2197+ liquidity_history : HistoricalLiquidityTracker :: new ( ) ,
21632198 } ) ;
21642199 let source = source_node_id ( ) ;
21652200 let target = target_node_id ( ) ;
@@ -2278,8 +2313,7 @@ mod tests {
22782313 ChannelLiquidity {
22792314 min_liquidity_offset_msat : 40 , max_liquidity_offset_msat : 40 ,
22802315 last_updated, offset_history_last_updated,
2281- min_liquidity_offset_history : HistoricalBucketRangeTracker :: new ( ) ,
2282- max_liquidity_offset_history : HistoricalBucketRangeTracker :: new ( ) ,
2316+ liquidity_history : HistoricalLiquidityTracker :: new ( ) ,
22832317 } ) ;
22842318 let source = source_node_id ( ) ;
22852319
0 commit comments