@@ -1634,24 +1634,29 @@ mod bucketed_history {
1634
1634
pub ( super ) struct HistoricalLiquidityTracker {
1635
1635
min_liquidity_offset_history : HistoricalBucketRangeTracker ,
1636
1636
max_liquidity_offset_history : HistoricalBucketRangeTracker ,
1637
+ total_valid_points_tracked : u64 ,
1637
1638
}
1638
1639
1639
1640
impl HistoricalLiquidityTracker {
1640
1641
pub ( super ) fn new ( ) -> HistoricalLiquidityTracker {
1641
1642
HistoricalLiquidityTracker {
1642
1643
min_liquidity_offset_history : HistoricalBucketRangeTracker :: new ( ) ,
1643
1644
max_liquidity_offset_history : HistoricalBucketRangeTracker :: new ( ) ,
1645
+ total_valid_points_tracked : 0 ,
1644
1646
}
1645
1647
}
1646
1648
1647
1649
pub ( super ) fn from_min_max (
1648
1650
min_liquidity_offset_history : HistoricalBucketRangeTracker ,
1649
1651
max_liquidity_offset_history : HistoricalBucketRangeTracker ,
1650
1652
) -> HistoricalLiquidityTracker {
1651
- HistoricalLiquidityTracker {
1653
+ let mut res = HistoricalLiquidityTracker {
1652
1654
min_liquidity_offset_history,
1653
1655
max_liquidity_offset_history,
1654
- }
1656
+ total_valid_points_tracked : 0 ,
1657
+ } ;
1658
+ res. recalculate_valid_point_count ( ) ;
1659
+ res
1655
1660
}
1656
1661
1657
1662
pub ( super ) fn has_datapoints ( & self ) -> bool {
@@ -1667,6 +1672,16 @@ mod bucketed_history {
1667
1672
for bucket in self . max_liquidity_offset_history . buckets . iter_mut ( ) {
1668
1673
* bucket = ( ( * bucket as u64 ) * 1024 / divisor) as u16 ;
1669
1674
}
1675
+ self . recalculate_valid_point_count ( ) ;
1676
+ }
1677
+
1678
+ fn recalculate_valid_point_count ( & mut self ) {
1679
+ self . total_valid_points_tracked = 0 ;
1680
+ for ( min_idx, min_bucket) in self . min_liquidity_offset_history . buckets . iter ( ) . enumerate ( ) {
1681
+ for max_bucket in self . max_liquidity_offset_history . buckets . iter ( ) . take ( 32 - min_idx) {
1682
+ self . total_valid_points_tracked += ( * min_bucket as u64 ) * ( * max_bucket as u64 ) ;
1683
+ }
1684
+ }
1670
1685
}
1671
1686
1672
1687
pub ( super ) fn writeable_min_offset_history ( & self ) -> & HistoricalBucketRangeTracker {
@@ -1706,6 +1721,7 @@ mod bucketed_history {
1706
1721
self . tracker . max_liquidity_offset_history . track_datapoint ( min_offset_msat, capacity_msat) ;
1707
1722
self . tracker . min_liquidity_offset_history . track_datapoint ( max_offset_msat, capacity_msat) ;
1708
1723
}
1724
+ self . tracker . recalculate_valid_point_count ( ) ;
1709
1725
}
1710
1726
}
1711
1727
@@ -1746,11 +1762,15 @@ mod bucketed_history {
1746
1762
let max_liquidity_offset_history_buckets =
1747
1763
self . max_liquidity_offset_history_buckets ( ) ;
1748
1764
1749
- let mut total_valid_points_tracked = 0 ;
1750
- for ( min_idx, min_bucket) in min_liquidity_offset_history_buckets. iter ( ) . enumerate ( ) {
1751
- for max_bucket in max_liquidity_offset_history_buckets. iter ( ) . take ( 32 - min_idx) {
1752
- total_valid_points_tracked += ( * min_bucket as u64 ) * ( * max_bucket as u64 ) ;
1765
+ let total_valid_points_tracked = self . tracker . total_valid_points_tracked ;
1766
+ #[ cfg( debug_assertions) ] {
1767
+ let mut actual_valid_points_tracked = 0 ;
1768
+ for ( min_idx, min_bucket) in min_liquidity_offset_history_buckets. iter ( ) . enumerate ( ) {
1769
+ for max_bucket in max_liquidity_offset_history_buckets. iter ( ) . take ( 32 - min_idx) {
1770
+ actual_valid_points_tracked += ( * min_bucket as u64 ) * ( * max_bucket as u64 ) ;
1771
+ }
1753
1772
}
1773
+ assert_eq ! ( total_valid_points_tracked, actual_valid_points_tracked) ;
1754
1774
}
1755
1775
1756
1776
// If the total valid points is smaller than 1.0 (i.e. 32 in our fixed-point scheme),
0 commit comments