@@ -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 {
@@ -1951,14 +1940,6 @@ mod bucketed_history {
1951
1940
self . buckets [ bucket] = self . buckets [ bucket] . saturating_add ( BUCKET_FIXED_POINT_ONE ) ;
1952
1941
}
1953
1942
}
1954
- /// Decay all buckets by the given number of half-lives. Used to more aggressively remove old
1955
- /// datapoints as we receive newer information.
1956
- #[ inline]
1957
- pub ( super ) fn time_decay_data ( & mut self , half_lives : u32 ) {
1958
- for e in self . buckets . iter_mut ( ) {
1959
- * e = e. checked_shr ( half_lives) . unwrap_or ( 0 ) ;
1960
- }
1961
- }
1962
1943
}
1963
1944
1964
1945
impl_writeable_tlv_based ! ( HistoricalBucketRangeTracker , { ( 0 , buckets, required) } ) ;
@@ -2354,52 +2335,52 @@ mod tests {
2354
2335
// Update minimum liquidity.
2355
2336
2356
2337
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2357
- . as_directed ( & source, & target, 1_000 , decay_params ) ;
2338
+ . as_directed ( & source, & target, 1_000 ) ;
2358
2339
assert_eq ! ( liquidity. min_liquidity_msat( ) , 100 ) ;
2359
2340
assert_eq ! ( liquidity. max_liquidity_msat( ) , 300 ) ;
2360
2341
2361
2342
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2362
- . as_directed ( & target, & source, 1_000 , decay_params ) ;
2343
+ . as_directed ( & target, & source, 1_000 ) ;
2363
2344
assert_eq ! ( liquidity. min_liquidity_msat( ) , 700 ) ;
2364
2345
assert_eq ! ( liquidity. max_liquidity_msat( ) , 900 ) ;
2365
2346
2366
2347
scorer. channel_liquidities . get_mut ( & 42 ) . unwrap ( )
2367
- . as_directed_mut ( & source, & target, 1_000 , decay_params )
2348
+ . as_directed_mut ( & source, & target, 1_000 )
2368
2349
. set_min_liquidity_msat ( 200 , Duration :: ZERO ) ;
2369
2350
2370
2351
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2371
- . as_directed ( & source, & target, 1_000 , decay_params ) ;
2352
+ . as_directed ( & source, & target, 1_000 ) ;
2372
2353
assert_eq ! ( liquidity. min_liquidity_msat( ) , 200 ) ;
2373
2354
assert_eq ! ( liquidity. max_liquidity_msat( ) , 300 ) ;
2374
2355
2375
2356
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2376
- . as_directed ( & target, & source, 1_000 , decay_params ) ;
2357
+ . as_directed ( & target, & source, 1_000 ) ;
2377
2358
assert_eq ! ( liquidity. min_liquidity_msat( ) , 700 ) ;
2378
2359
assert_eq ! ( liquidity. max_liquidity_msat( ) , 800 ) ;
2379
2360
2380
2361
// Update maximum liquidity.
2381
2362
2382
2363
let liquidity = scorer. channel_liquidities . get ( & 43 ) . unwrap ( )
2383
- . as_directed ( & target, & recipient, 1_000 , decay_params ) ;
2364
+ . as_directed ( & target, & recipient, 1_000 ) ;
2384
2365
assert_eq ! ( liquidity. min_liquidity_msat( ) , 700 ) ;
2385
2366
assert_eq ! ( liquidity. max_liquidity_msat( ) , 900 ) ;
2386
2367
2387
2368
let liquidity = scorer. channel_liquidities . get ( & 43 ) . unwrap ( )
2388
- . as_directed ( & recipient, & target, 1_000 , decay_params ) ;
2369
+ . as_directed ( & recipient, & target, 1_000 ) ;
2389
2370
assert_eq ! ( liquidity. min_liquidity_msat( ) , 100 ) ;
2390
2371
assert_eq ! ( liquidity. max_liquidity_msat( ) , 300 ) ;
2391
2372
2392
2373
scorer. channel_liquidities . get_mut ( & 43 ) . unwrap ( )
2393
- . as_directed_mut ( & target, & recipient, 1_000 , decay_params )
2374
+ . as_directed_mut ( & target, & recipient, 1_000 )
2394
2375
. set_max_liquidity_msat ( 200 , Duration :: ZERO ) ;
2395
2376
2396
2377
let liquidity = scorer. channel_liquidities . get ( & 43 ) . unwrap ( )
2397
- . as_directed ( & target, & recipient, 1_000 , decay_params ) ;
2378
+ . as_directed ( & target, & recipient, 1_000 ) ;
2398
2379
assert_eq ! ( liquidity. min_liquidity_msat( ) , 0 ) ;
2399
2380
assert_eq ! ( liquidity. max_liquidity_msat( ) , 200 ) ;
2400
2381
2401
2382
let liquidity = scorer. channel_liquidities . get ( & 43 ) . unwrap ( )
2402
- . as_directed ( & recipient, & target, 1_000 , decay_params ) ;
2383
+ . as_directed ( & recipient, & target, 1_000 ) ;
2403
2384
assert_eq ! ( liquidity. min_liquidity_msat( ) , 800 ) ;
2404
2385
assert_eq ! ( liquidity. max_liquidity_msat( ) , 1000 ) ;
2405
2386
}
@@ -2425,42 +2406,42 @@ mod tests {
2425
2406
2426
2407
// Check initial bounds.
2427
2408
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2428
- . as_directed ( & source, & target, 1_000 , decay_params ) ;
2409
+ . as_directed ( & source, & target, 1_000 ) ;
2429
2410
assert_eq ! ( liquidity. min_liquidity_msat( ) , 400 ) ;
2430
2411
assert_eq ! ( liquidity. max_liquidity_msat( ) , 800 ) ;
2431
2412
2432
2413
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2433
- . as_directed ( & target, & source, 1_000 , decay_params ) ;
2414
+ . as_directed ( & target, & source, 1_000 ) ;
2434
2415
assert_eq ! ( liquidity. min_liquidity_msat( ) , 200 ) ;
2435
2416
assert_eq ! ( liquidity. max_liquidity_msat( ) , 600 ) ;
2436
2417
2437
2418
// Reset from source to target.
2438
2419
scorer. channel_liquidities . get_mut ( & 42 ) . unwrap ( )
2439
- . as_directed_mut ( & source, & target, 1_000 , decay_params )
2420
+ . as_directed_mut ( & source, & target, 1_000 )
2440
2421
. set_min_liquidity_msat ( 900 , Duration :: ZERO ) ;
2441
2422
2442
2423
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2443
- . as_directed ( & source, & target, 1_000 , decay_params ) ;
2424
+ . as_directed ( & source, & target, 1_000 ) ;
2444
2425
assert_eq ! ( liquidity. min_liquidity_msat( ) , 900 ) ;
2445
2426
assert_eq ! ( liquidity. max_liquidity_msat( ) , 1_000 ) ;
2446
2427
2447
2428
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2448
- . as_directed ( & target, & source, 1_000 , decay_params ) ;
2429
+ . as_directed ( & target, & source, 1_000 ) ;
2449
2430
assert_eq ! ( liquidity. min_liquidity_msat( ) , 0 ) ;
2450
2431
assert_eq ! ( liquidity. max_liquidity_msat( ) , 100 ) ;
2451
2432
2452
2433
// Reset from target to source.
2453
2434
scorer. channel_liquidities . get_mut ( & 42 ) . unwrap ( )
2454
- . as_directed_mut ( & target, & source, 1_000 , decay_params )
2435
+ . as_directed_mut ( & target, & source, 1_000 )
2455
2436
. set_min_liquidity_msat ( 400 , Duration :: ZERO ) ;
2456
2437
2457
2438
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2458
- . as_directed ( & source, & target, 1_000 , decay_params ) ;
2439
+ . as_directed ( & source, & target, 1_000 ) ;
2459
2440
assert_eq ! ( liquidity. min_liquidity_msat( ) , 0 ) ;
2460
2441
assert_eq ! ( liquidity. max_liquidity_msat( ) , 600 ) ;
2461
2442
2462
2443
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2463
- . as_directed ( & target, & source, 1_000 , decay_params ) ;
2444
+ . as_directed ( & target, & source, 1_000 ) ;
2464
2445
assert_eq ! ( liquidity. min_liquidity_msat( ) , 400 ) ;
2465
2446
assert_eq ! ( liquidity. max_liquidity_msat( ) , 1_000 ) ;
2466
2447
}
@@ -2486,42 +2467,42 @@ mod tests {
2486
2467
2487
2468
// Check initial bounds.
2488
2469
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2489
- . as_directed ( & source, & target, 1_000 , decay_params ) ;
2470
+ . as_directed ( & source, & target, 1_000 ) ;
2490
2471
assert_eq ! ( liquidity. min_liquidity_msat( ) , 400 ) ;
2491
2472
assert_eq ! ( liquidity. max_liquidity_msat( ) , 800 ) ;
2492
2473
2493
2474
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2494
- . as_directed ( & target, & source, 1_000 , decay_params ) ;
2475
+ . as_directed ( & target, & source, 1_000 ) ;
2495
2476
assert_eq ! ( liquidity. min_liquidity_msat( ) , 200 ) ;
2496
2477
assert_eq ! ( liquidity. max_liquidity_msat( ) , 600 ) ;
2497
2478
2498
2479
// Reset from source to target.
2499
2480
scorer. channel_liquidities . get_mut ( & 42 ) . unwrap ( )
2500
- . as_directed_mut ( & source, & target, 1_000 , decay_params )
2481
+ . as_directed_mut ( & source, & target, 1_000 )
2501
2482
. set_max_liquidity_msat ( 300 , Duration :: ZERO ) ;
2502
2483
2503
2484
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2504
- . as_directed ( & source, & target, 1_000 , decay_params ) ;
2485
+ . as_directed ( & source, & target, 1_000 ) ;
2505
2486
assert_eq ! ( liquidity. min_liquidity_msat( ) , 0 ) ;
2506
2487
assert_eq ! ( liquidity. max_liquidity_msat( ) , 300 ) ;
2507
2488
2508
2489
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2509
- . as_directed ( & target, & source, 1_000 , decay_params ) ;
2490
+ . as_directed ( & target, & source, 1_000 ) ;
2510
2491
assert_eq ! ( liquidity. min_liquidity_msat( ) , 700 ) ;
2511
2492
assert_eq ! ( liquidity. max_liquidity_msat( ) , 1_000 ) ;
2512
2493
2513
2494
// Reset from target to source.
2514
2495
scorer. channel_liquidities . get_mut ( & 42 ) . unwrap ( )
2515
- . as_directed_mut ( & target, & source, 1_000 , decay_params )
2496
+ . as_directed_mut ( & target, & source, 1_000 )
2516
2497
. set_max_liquidity_msat ( 600 , Duration :: ZERO ) ;
2517
2498
2518
2499
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2519
- . as_directed ( & source, & target, 1_000 , decay_params ) ;
2500
+ . as_directed ( & source, & target, 1_000 ) ;
2520
2501
assert_eq ! ( liquidity. min_liquidity_msat( ) , 400 ) ;
2521
2502
assert_eq ! ( liquidity. max_liquidity_msat( ) , 1_000 ) ;
2522
2503
2523
2504
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2524
- . as_directed ( & target, & source, 1_000 , decay_params ) ;
2505
+ . as_directed ( & target, & source, 1_000 ) ;
2525
2506
assert_eq ! ( liquidity. min_liquidity_msat( ) , 0 ) ;
2526
2507
assert_eq ! ( liquidity. max_liquidity_msat( ) , 600 ) ;
2527
2508
}
@@ -3464,7 +3445,7 @@ mod tests {
3464
3445
scorer. payment_path_failed ( & path, 43 , Duration :: ZERO ) ;
3465
3446
3466
3447
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
3467
- . as_directed ( & source, & target, 1_000 , decay_params ) ;
3448
+ . as_directed ( & source, & target, 1_000 ) ;
3468
3449
assert_eq ! ( liquidity. min_liquidity_msat( ) , 256 ) ;
3469
3450
assert_eq ! ( liquidity. max_liquidity_msat( ) , 768 ) ;
3470
3451
}
0 commit comments