@@ -807,7 +807,6 @@ struct DirectedChannelLiquidity<L: Deref<Target = u64>, BRT: Deref<Target = Hist
807
807
capacity_msat : u64 ,
808
808
last_updated : T ,
809
809
offset_history_last_updated : T ,
810
- decay_params : ProbabilisticScoringDecayParameters ,
811
810
}
812
811
813
812
impl < G : Deref < Target = NetworkGraph < L > > , L : Deref > ProbabilisticScorer < G , L > where L :: Target : Logger {
@@ -839,7 +838,7 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref> ProbabilisticScorer<G, L> whe
839
838
let log_direction = |source, target| {
840
839
if let Some ( ( directed_info, _) ) = chan_debug. as_directed_to ( target) {
841
840
let amt = directed_info. effective_capacity ( ) . as_msat ( ) ;
842
- let dir_liq = liq. as_directed ( source, target, amt, self . decay_params ) ;
841
+ let dir_liq = liq. as_directed ( source, target, amt) ;
843
842
844
843
let min_buckets = & dir_liq. liquidity_history . min_liquidity_offset_history . buckets ;
845
844
let max_buckets = & dir_liq. liquidity_history . max_liquidity_offset_history . buckets ;
@@ -891,7 +890,7 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref> ProbabilisticScorer<G, L> whe
891
890
if let Some ( liq) = self . channel_liquidities . get ( & scid) {
892
891
if let Some ( ( directed_info, source) ) = chan. as_directed_to ( target) {
893
892
let amt = directed_info. effective_capacity ( ) . as_msat ( ) ;
894
- let dir_liq = liq. as_directed ( source, target, amt, self . decay_params ) ;
893
+ let dir_liq = liq. as_directed ( source, target, amt) ;
895
894
return Some ( ( dir_liq. min_liquidity_msat ( ) , dir_liq. max_liquidity_msat ( ) ) ) ;
896
895
}
897
896
}
@@ -933,7 +932,7 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref> ProbabilisticScorer<G, L> whe
933
932
if let Some ( liq) = self . channel_liquidities . get ( & scid) {
934
933
if let Some ( ( directed_info, source) ) = chan. as_directed_to ( target) {
935
934
let amt = directed_info. effective_capacity ( ) . as_msat ( ) ;
936
- let dir_liq = liq. as_directed ( source, target, amt, self . decay_params ) ;
935
+ let dir_liq = liq. as_directed ( source, target, amt) ;
937
936
938
937
let min_buckets = dir_liq. liquidity_history . min_liquidity_offset_history . buckets ;
939
938
let mut max_buckets = dir_liq. liquidity_history . max_liquidity_offset_history . buckets ;
@@ -964,7 +963,7 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref> ProbabilisticScorer<G, L> whe
964
963
if let Some ( liq) = self . channel_liquidities . get ( & scid) {
965
964
if let Some ( ( directed_info, source) ) = chan. as_directed_to ( target) {
966
965
let capacity_msat = directed_info. effective_capacity ( ) . as_msat ( ) ;
967
- let dir_liq = liq. as_directed ( source, target, capacity_msat, self . decay_params ) ;
966
+ let dir_liq = liq. as_directed ( source, target, capacity_msat) ;
968
967
969
968
return dir_liq. liquidity_history . calculate_success_probability_times_billion (
970
969
& params, amount_msat, capacity_msat
@@ -991,7 +990,7 @@ impl ChannelLiquidity {
991
990
/// Returns a view of the channel liquidity directed from `source` to `target` assuming
992
991
/// `capacity_msat`.
993
992
fn as_directed (
994
- & self , source : & NodeId , target : & NodeId , capacity_msat : u64 , decay_params : ProbabilisticScoringDecayParameters
993
+ & self , source : & NodeId , target : & NodeId , capacity_msat : u64 ,
995
994
) -> DirectedChannelLiquidity < & u64 , & HistoricalBucketRangeTracker , & Duration > {
996
995
let ( min_liquidity_offset_msat, max_liquidity_offset_msat, min_liquidity_offset_history, max_liquidity_offset_history) =
997
996
if source < target {
@@ -1012,14 +1011,13 @@ impl ChannelLiquidity {
1012
1011
capacity_msat,
1013
1012
last_updated : & self . last_updated ,
1014
1013
offset_history_last_updated : & self . offset_history_last_updated ,
1015
- decay_params : decay_params,
1016
1014
}
1017
1015
}
1018
1016
1019
1017
/// Returns a mutable view of the channel liquidity directed from `source` to `target` assuming
1020
1018
/// `capacity_msat`.
1021
1019
fn as_directed_mut (
1022
- & mut self , source : & NodeId , target : & NodeId , capacity_msat : u64 , decay_params : ProbabilisticScoringDecayParameters
1020
+ & mut self , source : & NodeId , target : & NodeId , capacity_msat : u64 ,
1023
1021
) -> DirectedChannelLiquidity < & mut u64 , & mut HistoricalBucketRangeTracker , & mut Duration > {
1024
1022
let ( min_liquidity_offset_msat, max_liquidity_offset_msat, min_liquidity_offset_history, max_liquidity_offset_history) =
1025
1023
if source < target {
@@ -1040,7 +1038,6 @@ impl ChannelLiquidity {
1040
1038
capacity_msat,
1041
1039
last_updated : & mut self . last_updated ,
1042
1040
offset_history_last_updated : & mut self . offset_history_last_updated ,
1043
- decay_params : decay_params,
1044
1041
}
1045
1042
}
1046
1043
@@ -1290,14 +1287,6 @@ DirectedChannelLiquidity<L, BRT, T> {
1290
1287
/// state"), we allow the caller to set an offset applied to our liquidity bounds which
1291
1288
/// represents the amount of the successful payment we just made.
1292
1289
fn update_history_buckets ( & mut self , bucket_offset_msat : u64 , duration_since_epoch : Duration ) {
1293
- let half_lives =
1294
- duration_since_epoch. checked_sub ( * self . offset_history_last_updated )
1295
- . unwrap_or ( Duration :: ZERO ) . as_secs ( )
1296
- . checked_div ( self . decay_params . historical_no_updates_half_life . as_secs ( ) )
1297
- . map ( |v| v. try_into ( ) . unwrap_or ( u32:: max_value ( ) ) ) . unwrap_or ( u32:: max_value ( ) ) ;
1298
- self . liquidity_history . min_liquidity_offset_history . time_decay_data ( half_lives) ;
1299
- self . liquidity_history . max_liquidity_offset_history . time_decay_data ( half_lives) ;
1300
-
1301
1290
self . liquidity_history . min_liquidity_offset_history . track_datapoint (
1302
1291
* self . min_liquidity_offset_msat + bucket_offset_msat, self . capacity_msat
1303
1292
) ;
@@ -1363,7 +1352,7 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref> ScoreLookUp for Probabilistic
1363
1352
self . channel_liquidities
1364
1353
. get ( & short_channel_id)
1365
1354
. unwrap_or ( & ChannelLiquidity :: new ( Duration :: ZERO ) )
1366
- . as_directed ( source, target, capacity_msat, self . decay_params )
1355
+ . as_directed ( source, target, capacity_msat)
1367
1356
. penalty_msat ( amount_msat, score_params)
1368
1357
. saturating_add ( anti_probing_penalty_msat)
1369
1358
. saturating_add ( base_penalty_msat)
@@ -1393,14 +1382,14 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref> ScoreUpdate for Probabilistic
1393
1382
self . channel_liquidities
1394
1383
. entry ( hop. short_channel_id )
1395
1384
. or_insert_with ( || ChannelLiquidity :: new ( duration_since_epoch) )
1396
- . as_directed_mut ( source, & target, capacity_msat, self . decay_params )
1385
+ . as_directed_mut ( source, & target, capacity_msat)
1397
1386
. failed_at_channel ( amount_msat, duration_since_epoch,
1398
1387
format_args ! ( "SCID {}, towards {:?}" , hop. short_channel_id, target) , & self . logger ) ;
1399
1388
} else {
1400
1389
self . channel_liquidities
1401
1390
. entry ( hop. short_channel_id )
1402
1391
. or_insert_with ( || ChannelLiquidity :: new ( duration_since_epoch) )
1403
- . as_directed_mut ( source, & target, capacity_msat, self . decay_params )
1392
+ . as_directed_mut ( source, & target, capacity_msat)
1404
1393
. failed_downstream ( amount_msat, duration_since_epoch,
1405
1394
format_args ! ( "SCID {}, towards {:?}" , hop. short_channel_id, target) , & self . logger ) ;
1406
1395
}
@@ -1429,7 +1418,7 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref> ScoreUpdate for Probabilistic
1429
1418
self . channel_liquidities
1430
1419
. entry ( hop. short_channel_id )
1431
1420
. or_insert_with ( || ChannelLiquidity :: new ( duration_since_epoch) )
1432
- . as_directed_mut ( source, & target, capacity_msat, self . decay_params )
1421
+ . as_directed_mut ( source, & target, capacity_msat)
1433
1422
. successful ( amount_msat, duration_since_epoch,
1434
1423
format_args ! ( "SCID {}, towards {:?}" , hop. short_channel_id, target) , & self . logger ) ;
1435
1424
} else {
@@ -1953,14 +1942,6 @@ mod bucketed_history {
1953
1942
self . buckets [ bucket] = self . buckets [ bucket] . saturating_add ( BUCKET_FIXED_POINT_ONE ) ;
1954
1943
}
1955
1944
}
1956
- /// Decay all buckets by the given number of half-lives. Used to more aggressively remove old
1957
- /// datapoints as we receive newer information.
1958
- #[ inline]
1959
- pub ( super ) fn time_decay_data ( & mut self , half_lives : u32 ) {
1960
- for e in self . buckets . iter_mut ( ) {
1961
- * e = e. checked_shr ( half_lives) . unwrap_or ( 0 ) ;
1962
- }
1963
- }
1964
1945
}
1965
1946
1966
1947
impl_writeable_tlv_based ! ( HistoricalBucketRangeTracker , { ( 0 , buckets, required) } ) ;
@@ -2357,52 +2338,52 @@ mod tests {
2357
2338
// Update minimum liquidity.
2358
2339
2359
2340
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2360
- . as_directed ( & source, & target, 1_000 , decay_params ) ;
2341
+ . as_directed ( & source, & target, 1_000 ) ;
2361
2342
assert_eq ! ( liquidity. min_liquidity_msat( ) , 100 ) ;
2362
2343
assert_eq ! ( liquidity. max_liquidity_msat( ) , 300 ) ;
2363
2344
2364
2345
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2365
- . as_directed ( & target, & source, 1_000 , decay_params ) ;
2346
+ . as_directed ( & target, & source, 1_000 ) ;
2366
2347
assert_eq ! ( liquidity. min_liquidity_msat( ) , 700 ) ;
2367
2348
assert_eq ! ( liquidity. max_liquidity_msat( ) , 900 ) ;
2368
2349
2369
2350
scorer. channel_liquidities . get_mut ( & 42 ) . unwrap ( )
2370
- . as_directed_mut ( & source, & target, 1_000 , decay_params )
2351
+ . as_directed_mut ( & source, & target, 1_000 )
2371
2352
. set_min_liquidity_msat ( 200 , Duration :: ZERO ) ;
2372
2353
2373
2354
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2374
- . as_directed ( & source, & target, 1_000 , decay_params ) ;
2355
+ . as_directed ( & source, & target, 1_000 ) ;
2375
2356
assert_eq ! ( liquidity. min_liquidity_msat( ) , 200 ) ;
2376
2357
assert_eq ! ( liquidity. max_liquidity_msat( ) , 300 ) ;
2377
2358
2378
2359
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2379
- . as_directed ( & target, & source, 1_000 , decay_params ) ;
2360
+ . as_directed ( & target, & source, 1_000 ) ;
2380
2361
assert_eq ! ( liquidity. min_liquidity_msat( ) , 700 ) ;
2381
2362
assert_eq ! ( liquidity. max_liquidity_msat( ) , 800 ) ;
2382
2363
2383
2364
// Update maximum liquidity.
2384
2365
2385
2366
let liquidity = scorer. channel_liquidities . get ( & 43 ) . unwrap ( )
2386
- . as_directed ( & target, & recipient, 1_000 , decay_params ) ;
2367
+ . as_directed ( & target, & recipient, 1_000 ) ;
2387
2368
assert_eq ! ( liquidity. min_liquidity_msat( ) , 700 ) ;
2388
2369
assert_eq ! ( liquidity. max_liquidity_msat( ) , 900 ) ;
2389
2370
2390
2371
let liquidity = scorer. channel_liquidities . get ( & 43 ) . unwrap ( )
2391
- . as_directed ( & recipient, & target, 1_000 , decay_params ) ;
2372
+ . as_directed ( & recipient, & target, 1_000 ) ;
2392
2373
assert_eq ! ( liquidity. min_liquidity_msat( ) , 100 ) ;
2393
2374
assert_eq ! ( liquidity. max_liquidity_msat( ) , 300 ) ;
2394
2375
2395
2376
scorer. channel_liquidities . get_mut ( & 43 ) . unwrap ( )
2396
- . as_directed_mut ( & target, & recipient, 1_000 , decay_params )
2377
+ . as_directed_mut ( & target, & recipient, 1_000 )
2397
2378
. set_max_liquidity_msat ( 200 , Duration :: ZERO ) ;
2398
2379
2399
2380
let liquidity = scorer. channel_liquidities . get ( & 43 ) . unwrap ( )
2400
- . as_directed ( & target, & recipient, 1_000 , decay_params ) ;
2381
+ . as_directed ( & target, & recipient, 1_000 ) ;
2401
2382
assert_eq ! ( liquidity. min_liquidity_msat( ) , 0 ) ;
2402
2383
assert_eq ! ( liquidity. max_liquidity_msat( ) , 200 ) ;
2403
2384
2404
2385
let liquidity = scorer. channel_liquidities . get ( & 43 ) . unwrap ( )
2405
- . as_directed ( & recipient, & target, 1_000 , decay_params ) ;
2386
+ . as_directed ( & recipient, & target, 1_000 ) ;
2406
2387
assert_eq ! ( liquidity. min_liquidity_msat( ) , 800 ) ;
2407
2388
assert_eq ! ( liquidity. max_liquidity_msat( ) , 1000 ) ;
2408
2389
}
@@ -2428,42 +2409,42 @@ mod tests {
2428
2409
2429
2410
// Check initial bounds.
2430
2411
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2431
- . as_directed ( & source, & target, 1_000 , decay_params ) ;
2412
+ . as_directed ( & source, & target, 1_000 ) ;
2432
2413
assert_eq ! ( liquidity. min_liquidity_msat( ) , 400 ) ;
2433
2414
assert_eq ! ( liquidity. max_liquidity_msat( ) , 800 ) ;
2434
2415
2435
2416
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2436
- . as_directed ( & target, & source, 1_000 , decay_params ) ;
2417
+ . as_directed ( & target, & source, 1_000 ) ;
2437
2418
assert_eq ! ( liquidity. min_liquidity_msat( ) , 200 ) ;
2438
2419
assert_eq ! ( liquidity. max_liquidity_msat( ) , 600 ) ;
2439
2420
2440
2421
// Reset from source to target.
2441
2422
scorer. channel_liquidities . get_mut ( & 42 ) . unwrap ( )
2442
- . as_directed_mut ( & source, & target, 1_000 , decay_params )
2423
+ . as_directed_mut ( & source, & target, 1_000 )
2443
2424
. set_min_liquidity_msat ( 900 , Duration :: ZERO ) ;
2444
2425
2445
2426
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2446
- . as_directed ( & source, & target, 1_000 , decay_params ) ;
2427
+ . as_directed ( & source, & target, 1_000 ) ;
2447
2428
assert_eq ! ( liquidity. min_liquidity_msat( ) , 900 ) ;
2448
2429
assert_eq ! ( liquidity. max_liquidity_msat( ) , 1_000 ) ;
2449
2430
2450
2431
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2451
- . as_directed ( & target, & source, 1_000 , decay_params ) ;
2432
+ . as_directed ( & target, & source, 1_000 ) ;
2452
2433
assert_eq ! ( liquidity. min_liquidity_msat( ) , 0 ) ;
2453
2434
assert_eq ! ( liquidity. max_liquidity_msat( ) , 100 ) ;
2454
2435
2455
2436
// Reset from target to source.
2456
2437
scorer. channel_liquidities . get_mut ( & 42 ) . unwrap ( )
2457
- . as_directed_mut ( & target, & source, 1_000 , decay_params )
2438
+ . as_directed_mut ( & target, & source, 1_000 )
2458
2439
. set_min_liquidity_msat ( 400 , Duration :: ZERO ) ;
2459
2440
2460
2441
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2461
- . as_directed ( & source, & target, 1_000 , decay_params ) ;
2442
+ . as_directed ( & source, & target, 1_000 ) ;
2462
2443
assert_eq ! ( liquidity. min_liquidity_msat( ) , 0 ) ;
2463
2444
assert_eq ! ( liquidity. max_liquidity_msat( ) , 600 ) ;
2464
2445
2465
2446
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2466
- . as_directed ( & target, & source, 1_000 , decay_params ) ;
2447
+ . as_directed ( & target, & source, 1_000 ) ;
2467
2448
assert_eq ! ( liquidity. min_liquidity_msat( ) , 400 ) ;
2468
2449
assert_eq ! ( liquidity. max_liquidity_msat( ) , 1_000 ) ;
2469
2450
}
@@ -2489,42 +2470,42 @@ mod tests {
2489
2470
2490
2471
// Check initial bounds.
2491
2472
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2492
- . as_directed ( & source, & target, 1_000 , decay_params ) ;
2473
+ . as_directed ( & source, & target, 1_000 ) ;
2493
2474
assert_eq ! ( liquidity. min_liquidity_msat( ) , 400 ) ;
2494
2475
assert_eq ! ( liquidity. max_liquidity_msat( ) , 800 ) ;
2495
2476
2496
2477
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2497
- . as_directed ( & target, & source, 1_000 , decay_params ) ;
2478
+ . as_directed ( & target, & source, 1_000 ) ;
2498
2479
assert_eq ! ( liquidity. min_liquidity_msat( ) , 200 ) ;
2499
2480
assert_eq ! ( liquidity. max_liquidity_msat( ) , 600 ) ;
2500
2481
2501
2482
// Reset from source to target.
2502
2483
scorer. channel_liquidities . get_mut ( & 42 ) . unwrap ( )
2503
- . as_directed_mut ( & source, & target, 1_000 , decay_params )
2484
+ . as_directed_mut ( & source, & target, 1_000 )
2504
2485
. set_max_liquidity_msat ( 300 , Duration :: ZERO ) ;
2505
2486
2506
2487
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2507
- . as_directed ( & source, & target, 1_000 , decay_params ) ;
2488
+ . as_directed ( & source, & target, 1_000 ) ;
2508
2489
assert_eq ! ( liquidity. min_liquidity_msat( ) , 0 ) ;
2509
2490
assert_eq ! ( liquidity. max_liquidity_msat( ) , 300 ) ;
2510
2491
2511
2492
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2512
- . as_directed ( & target, & source, 1_000 , decay_params ) ;
2493
+ . as_directed ( & target, & source, 1_000 ) ;
2513
2494
assert_eq ! ( liquidity. min_liquidity_msat( ) , 700 ) ;
2514
2495
assert_eq ! ( liquidity. max_liquidity_msat( ) , 1_000 ) ;
2515
2496
2516
2497
// Reset from target to source.
2517
2498
scorer. channel_liquidities . get_mut ( & 42 ) . unwrap ( )
2518
- . as_directed_mut ( & target, & source, 1_000 , decay_params )
2499
+ . as_directed_mut ( & target, & source, 1_000 )
2519
2500
. set_max_liquidity_msat ( 600 , Duration :: ZERO ) ;
2520
2501
2521
2502
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2522
- . as_directed ( & source, & target, 1_000 , decay_params ) ;
2503
+ . as_directed ( & source, & target, 1_000 ) ;
2523
2504
assert_eq ! ( liquidity. min_liquidity_msat( ) , 400 ) ;
2524
2505
assert_eq ! ( liquidity. max_liquidity_msat( ) , 1_000 ) ;
2525
2506
2526
2507
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2527
- . as_directed ( & target, & source, 1_000 , decay_params ) ;
2508
+ . as_directed ( & target, & source, 1_000 ) ;
2528
2509
assert_eq ! ( liquidity. min_liquidity_msat( ) , 0 ) ;
2529
2510
assert_eq ! ( liquidity. max_liquidity_msat( ) , 600 ) ;
2530
2511
}
@@ -3467,7 +3448,7 @@ mod tests {
3467
3448
scorer. payment_path_failed ( & path, 43 , Duration :: ZERO ) ;
3468
3449
3469
3450
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
3470
- . as_directed ( & source, & target, 1_000 , decay_params ) ;
3451
+ . as_directed ( & source, & target, 1_000 ) ;
3471
3452
assert_eq ! ( liquidity. min_liquidity_msat( ) , 256 ) ;
3472
3453
assert_eq ! ( liquidity. max_liquidity_msat( ) , 768 ) ;
3473
3454
}
0 commit comments