@@ -790,8 +790,7 @@ struct ChannelLiquidity {
790
790
/// Upper channel liquidity bound in terms of an offset from the effective capacity.
791
791
max_liquidity_offset_msat : u64 ,
792
792
793
- min_liquidity_offset_history : HistoricalBucketRangeTracker ,
794
- max_liquidity_offset_history : HistoricalBucketRangeTracker ,
793
+ liquidity_history : HistoricalLiquidityTracker ,
795
794
796
795
/// Time when either liquidity bound was last modified as an offset since the unix epoch.
797
796
last_updated : Duration ,
@@ -982,8 +981,7 @@ impl ChannelLiquidity {
982
981
Self {
983
982
min_liquidity_offset_msat : 0 ,
984
983
max_liquidity_offset_msat : 0 ,
985
- min_liquidity_offset_history : HistoricalBucketRangeTracker :: new ( ) ,
986
- max_liquidity_offset_history : HistoricalBucketRangeTracker :: new ( ) ,
984
+ liquidity_history : HistoricalLiquidityTracker :: new ( ) ,
987
985
last_updated,
988
986
offset_history_last_updated : last_updated,
989
987
}
@@ -994,22 +992,18 @@ impl ChannelLiquidity {
994
992
fn as_directed (
995
993
& self , source : & NodeId , target : & NodeId , capacity_msat : u64 ,
996
994
) -> 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 )
1001
999
} 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 )
1004
1001
} ;
1005
1002
1006
1003
DirectedChannelLiquidity {
1007
1004
min_liquidity_offset_msat,
1008
1005
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) ,
1013
1007
capacity_msat,
1014
1008
last_updated : & self . last_updated ,
1015
1009
offset_history_last_updated : & self . offset_history_last_updated ,
@@ -1021,22 +1015,18 @@ impl ChannelLiquidity {
1021
1015
fn as_directed_mut (
1022
1016
& mut self , source : & NodeId , target : & NodeId , capacity_msat : u64 ,
1023
1017
) -> 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 )
1028
1022
} 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 )
1031
1024
} ;
1032
1025
1033
1026
DirectedChannelLiquidity {
1034
1027
min_liquidity_offset_msat,
1035
1028
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) ,
1040
1030
capacity_msat,
1041
1031
last_updated : & mut self . last_updated ,
1042
1032
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
1462
1452
let half_life = decay_params. historical_no_updates_half_life . as_secs_f64 ( ) ;
1463
1453
if half_life != 0.0 {
1464
1454
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 ( ) {
1466
1456
* bucket = ( ( * bucket as u64 ) * 1024 / divisor) as u16 ;
1467
1457
}
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 ( ) {
1469
1459
* bucket = ( ( * bucket as u64 ) * 1024 / divisor) as u16 ;
1470
1460
}
1471
1461
liquidity. offset_history_last_updated = duration_since_epoch;
1472
1462
}
1473
1463
}
1474
1464
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 ]
1477
1467
} ) ;
1478
1468
}
1479
1469
}
@@ -1648,6 +1638,54 @@ mod bucketed_history {
1648
1638
impl_writeable_tlv_based ! ( HistoricalBucketRangeTracker , { ( 0 , buckets, required) } ) ;
1649
1639
impl_writeable_tlv_based ! ( LegacyHistoricalBucketRangeTracker , { ( 0 , buckets, required) } ) ;
1650
1640
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
+
1651
1689
/// A set of buckets representing the history of where we've seen the minimum- and maximum-
1652
1690
/// liquidity bounds for a given channel.
1653
1691
pub ( super ) struct HistoricalMinMaxBuckets < D : Deref < Target = HistoricalBucketRangeTracker > > {
@@ -1745,7 +1783,7 @@ mod bucketed_history {
1745
1783
}
1746
1784
}
1747
1785
}
1748
- use bucketed_history:: { LegacyHistoricalBucketRangeTracker , HistoricalBucketRangeTracker , HistoricalMinMaxBuckets } ;
1786
+ use bucketed_history:: { LegacyHistoricalBucketRangeTracker , HistoricalBucketRangeTracker , HistoricalMinMaxBuckets , HistoricalLiquidityTracker } ;
1749
1787
1750
1788
impl < G : Deref < Target = NetworkGraph < L > > , L : Deref > Writeable for ProbabilisticScorer < G , L > where L :: Target : Logger {
1751
1789
#[ inline]
@@ -1786,8 +1824,8 @@ impl Writeable for ChannelLiquidity {
1786
1824
( 2 , self . max_liquidity_offset_msat, required) ,
1787
1825
// 3 was the max_liquidity_offset_history in octile form
1788
1826
( 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 ) ,
1791
1829
( 9 , self . offset_history_last_updated, required) ,
1792
1830
} ) ;
1793
1831
Ok ( ( ) )
@@ -1833,8 +1871,9 @@ impl Readable for ChannelLiquidity {
1833
1871
Ok ( Self {
1834
1872
min_liquidity_offset_msat,
1835
1873
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
+ ) ,
1838
1877
last_updated,
1839
1878
offset_history_last_updated : offset_history_last_updated. unwrap_or ( last_updated) ,
1840
1879
} )
@@ -1843,7 +1882,7 @@ impl Readable for ChannelLiquidity {
1843
1882
1844
1883
#[ cfg( test) ]
1845
1884
mod tests {
1846
- use super :: { ChannelLiquidity , HistoricalBucketRangeTracker , ProbabilisticScoringFeeParameters , ProbabilisticScoringDecayParameters , ProbabilisticScorer } ;
1885
+ use super :: { ChannelLiquidity , HistoricalLiquidityTracker , ProbabilisticScoringFeeParameters , ProbabilisticScoringDecayParameters , ProbabilisticScorer } ;
1847
1886
use crate :: blinded_path:: { BlindedHop , BlindedPath , IntroductionNode } ;
1848
1887
use crate :: util:: config:: UserConfig ;
1849
1888
@@ -2016,15 +2055,13 @@ mod tests {
2016
2055
ChannelLiquidity {
2017
2056
min_liquidity_offset_msat : 700 , max_liquidity_offset_msat : 100 ,
2018
2057
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 ( ) ,
2021
2059
} )
2022
2060
. with_channel ( 43 ,
2023
2061
ChannelLiquidity {
2024
2062
min_liquidity_offset_msat : 700 , max_liquidity_offset_msat : 100 ,
2025
2063
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 ( ) ,
2028
2065
} ) ;
2029
2066
let source = source_node_id ( ) ;
2030
2067
let target = target_node_id ( ) ;
@@ -2097,8 +2134,7 @@ mod tests {
2097
2134
ChannelLiquidity {
2098
2135
min_liquidity_offset_msat : 200 , max_liquidity_offset_msat : 400 ,
2099
2136
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 ( ) ,
2102
2138
} ) ;
2103
2139
let source = source_node_id ( ) ;
2104
2140
let target = target_node_id ( ) ;
@@ -2158,8 +2194,7 @@ mod tests {
2158
2194
ChannelLiquidity {
2159
2195
min_liquidity_offset_msat : 200 , max_liquidity_offset_msat : 400 ,
2160
2196
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 ( ) ,
2163
2198
} ) ;
2164
2199
let source = source_node_id ( ) ;
2165
2200
let target = target_node_id ( ) ;
@@ -2278,8 +2313,7 @@ mod tests {
2278
2313
ChannelLiquidity {
2279
2314
min_liquidity_offset_msat : 40 , max_liquidity_offset_msat : 40 ,
2280
2315
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 ( ) ,
2283
2317
} ) ;
2284
2318
let source = source_node_id ( ) ;
2285
2319
0 commit comments