@@ -702,6 +702,7 @@ struct DirectedChannelLiquidity<'a, L: Deref<Target = u64>, BRT: Deref<Target =
702
702
max_liquidity_offset_msat : L ,
703
703
min_liquidity_offset_history : BRT ,
704
704
max_liquidity_offset_history : BRT ,
705
+ inflight_htlc_msat : u64 ,
705
706
capacity_msat : u64 ,
706
707
last_updated : U ,
707
708
now : T ,
@@ -739,7 +740,7 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, T: Time> ProbabilisticScorerU
739
740
let log_direction = |source, target| {
740
741
if let Some ( ( directed_info, _) ) = chan_debug. as_directed_to ( target) {
741
742
let amt = directed_info. effective_capacity ( ) . as_msat ( ) ;
742
- let dir_liq = liq. as_directed ( source, target, amt, & self . params ) ;
743
+ let dir_liq = liq. as_directed ( source, target, 0 , amt, & self . params ) ;
743
744
744
745
let buckets = HistoricalMinMaxBuckets {
745
746
min_liquidity_offset_history : & dir_liq. min_liquidity_offset_history ,
@@ -781,7 +782,7 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, T: Time> ProbabilisticScorerU
781
782
if let Some ( liq) = self . channel_liquidities . get ( & scid) {
782
783
if let Some ( ( directed_info, source) ) = chan. as_directed_to ( target) {
783
784
let amt = directed_info. effective_capacity ( ) . as_msat ( ) ;
784
- let dir_liq = liq. as_directed ( source, target, amt, & self . params ) ;
785
+ let dir_liq = liq. as_directed ( source, target, 0 , amt, & self . params ) ;
785
786
return Some ( ( dir_liq. min_liquidity_msat ( ) , dir_liq. max_liquidity_msat ( ) ) ) ;
786
787
}
787
788
}
@@ -818,7 +819,7 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, T: Time> ProbabilisticScorerU
818
819
if let Some ( liq) = self . channel_liquidities . get ( & scid) {
819
820
if let Some ( ( directed_info, source) ) = chan. as_directed_to ( target) {
820
821
let amt = directed_info. effective_capacity ( ) . as_msat ( ) ;
821
- let dir_liq = liq. as_directed ( source, target, amt, & self . params ) ;
822
+ let dir_liq = liq. as_directed ( source, target, 0 , amt, & self . params ) ;
822
823
823
824
let buckets = HistoricalMinMaxBuckets {
824
825
min_liquidity_offset_history : & dir_liq. min_liquidity_offset_history ,
@@ -923,7 +924,8 @@ impl<T: Time> ChannelLiquidity<T> {
923
924
/// Returns a view of the channel liquidity directed from `source` to `target` assuming
924
925
/// `capacity_msat`.
925
926
fn as_directed < ' a > (
926
- & self , source : & NodeId , target : & NodeId , capacity_msat : u64 , params : & ' a ProbabilisticScoringParameters
927
+ & self , source : & NodeId , target : & NodeId , inflight_htlc_msat : u64 , capacity_msat : u64 ,
928
+ params : & ' a ProbabilisticScoringParameters
927
929
) -> DirectedChannelLiquidity < ' a , & u64 , & HistoricalBucketRangeTracker , T , & T > {
928
930
let ( min_liquidity_offset_msat, max_liquidity_offset_msat, min_liquidity_offset_history, max_liquidity_offset_history) =
929
931
if source < target {
@@ -939,6 +941,7 @@ impl<T: Time> ChannelLiquidity<T> {
939
941
max_liquidity_offset_msat,
940
942
min_liquidity_offset_history,
941
943
max_liquidity_offset_history,
944
+ inflight_htlc_msat,
942
945
capacity_msat,
943
946
last_updated : & self . last_updated ,
944
947
now : T :: now ( ) ,
@@ -949,7 +952,8 @@ impl<T: Time> ChannelLiquidity<T> {
949
952
/// Returns a mutable view of the channel liquidity directed from `source` to `target` assuming
950
953
/// `capacity_msat`.
951
954
fn as_directed_mut < ' a > (
952
- & mut self , source : & NodeId , target : & NodeId , capacity_msat : u64 , params : & ' a ProbabilisticScoringParameters
955
+ & mut self , source : & NodeId , target : & NodeId , inflight_htlc_msat : u64 , capacity_msat : u64 ,
956
+ params : & ' a ProbabilisticScoringParameters
953
957
) -> DirectedChannelLiquidity < ' a , & mut u64 , & mut HistoricalBucketRangeTracker , T , & mut T > {
954
958
let ( min_liquidity_offset_msat, max_liquidity_offset_msat, min_liquidity_offset_history, max_liquidity_offset_history) =
955
959
if source < target {
@@ -965,6 +969,7 @@ impl<T: Time> ChannelLiquidity<T> {
965
969
max_liquidity_offset_msat,
966
970
min_liquidity_offset_history,
967
971
max_liquidity_offset_history,
972
+ inflight_htlc_msat,
968
973
capacity_msat,
969
974
last_updated : & mut self . last_updated ,
970
975
now : T :: now ( ) ,
@@ -1022,7 +1027,16 @@ impl<L: Deref<Target = u64>, BRT: Deref<Target = HistoricalBucketRangeTracker>,
1022
1027
1023
1028
if params. historical_liquidity_penalty_multiplier_msat != 0 ||
1024
1029
params. historical_liquidity_penalty_amount_multiplier_msat != 0 {
1025
- let payment_amt_64th_bucket = amount_msat * 64 / self . capacity_msat ;
1030
+ let payment_amt_64th_bucket = if amount_msat < u64:: max_value ( ) / 64 {
1031
+ amount_msat * 64 / self . capacity_msat
1032
+ } else {
1033
+ // Only use 128-bit arithmetic when multiplication will overflow to avoid 128-bit
1034
+ // division. This branch should only be hit in fuzz testing since the amount would
1035
+ // need to be over 2.88 million BTC in practice.
1036
+ ( ( amount_msat as u128 ) * 64 / ( self . capacity_msat as u128 ) )
1037
+ . try_into ( ) . unwrap_or ( 65 )
1038
+ } ;
1039
+ #[ cfg( not( fuzzing) ) ]
1026
1040
debug_assert ! ( payment_amt_64th_bucket <= 64 ) ;
1027
1041
if payment_amt_64th_bucket > 64 { return res; }
1028
1042
@@ -1042,13 +1056,14 @@ impl<L: Deref<Target = u64>, BRT: Deref<Target = HistoricalBucketRangeTracker>,
1042
1056
// If we don't have any valid points (or, once decayed, we have less than a full
1043
1057
// point), redo the non-historical calculation with no liquidity bounds tracked and
1044
1058
// the historical penalty multipliers.
1045
- let max_capacity = self . capacity_msat . saturating_sub ( amount_msat) . saturating_add ( 1 ) ;
1059
+ let available_capacity = self . available_capacity ( ) ;
1060
+ let numerator = available_capacity. saturating_sub ( amount_msat) . saturating_add ( 1 ) ;
1061
+ let denominator = available_capacity. saturating_add ( 1 ) ;
1046
1062
let negative_log10_times_2048 =
1047
- approx:: negative_log10_times_2048 ( max_capacity , self . capacity_msat . saturating_add ( 1 ) ) ;
1063
+ approx:: negative_log10_times_2048 ( numerator , denominator ) ;
1048
1064
res = res. saturating_add ( Self :: combined_penalty_msat ( amount_msat, negative_log10_times_2048,
1049
1065
params. historical_liquidity_penalty_multiplier_msat ,
1050
1066
params. historical_liquidity_penalty_amount_multiplier_msat ) ) ;
1051
- return res;
1052
1067
}
1053
1068
}
1054
1069
@@ -1080,9 +1095,13 @@ impl<L: Deref<Target = u64>, BRT: Deref<Target = HistoricalBucketRangeTracker>,
1080
1095
1081
1096
/// Returns the upper bound of the channel liquidity balance in this direction.
1082
1097
fn max_liquidity_msat ( & self ) -> u64 {
1083
- self . capacity_msat
1084
- . checked_sub ( self . decayed_offset_msat ( * self . max_liquidity_offset_msat ) )
1085
- . unwrap_or ( 0 )
1098
+ self . available_capacity ( )
1099
+ . saturating_sub ( self . decayed_offset_msat ( * self . max_liquidity_offset_msat ) )
1100
+ }
1101
+
1102
+ /// Returns the capacity minus the in-flight HTLCs in this direction.
1103
+ fn available_capacity ( & self ) -> u64 {
1104
+ self . capacity_msat . saturating_sub ( self . inflight_htlc_msat )
1086
1105
}
1087
1106
1088
1107
fn decayed_offset_msat ( & self , offset_msat : u64 ) -> u64 {
@@ -1201,12 +1220,12 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, T: Time> Score for Probabilis
1201
1220
}
1202
1221
1203
1222
let amount_msat = usage. amount_msat ;
1204
- let capacity_msat = usage. effective_capacity . as_msat ( )
1205
- . saturating_sub ( usage. inflight_htlc_msat ) ;
1223
+ let capacity_msat = usage. effective_capacity . as_msat ( ) ;
1224
+ let inflight_htlc_msat = usage. inflight_htlc_msat ;
1206
1225
self . channel_liquidities
1207
1226
. get ( & short_channel_id)
1208
1227
. unwrap_or ( & ChannelLiquidity :: new ( ) )
1209
- . as_directed ( source, target, capacity_msat, & self . params )
1228
+ . as_directed ( source, target, inflight_htlc_msat , capacity_msat, & self . params )
1210
1229
. penalty_msat ( amount_msat, & self . params )
1211
1230
. saturating_add ( anti_probing_penalty_msat)
1212
1231
. saturating_add ( base_penalty_msat)
@@ -1234,13 +1253,13 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, T: Time> Score for Probabilis
1234
1253
self . channel_liquidities
1235
1254
. entry ( hop. short_channel_id )
1236
1255
. or_insert_with ( ChannelLiquidity :: new)
1237
- . as_directed_mut ( source, & target, capacity_msat, & self . params )
1256
+ . as_directed_mut ( source, & target, 0 , capacity_msat, & self . params )
1238
1257
. failed_at_channel ( amount_msat, format_args ! ( "SCID {}, towards {:?}" , hop. short_channel_id, target) , & self . logger ) ;
1239
1258
} else {
1240
1259
self . channel_liquidities
1241
1260
. entry ( hop. short_channel_id )
1242
1261
. or_insert_with ( ChannelLiquidity :: new)
1243
- . as_directed_mut ( source, & target, capacity_msat, & self . params )
1262
+ . as_directed_mut ( source, & target, 0 , capacity_msat, & self . params )
1244
1263
. failed_downstream ( amount_msat, format_args ! ( "SCID {}, towards {:?}" , hop. short_channel_id, target) , & self . logger ) ;
1245
1264
}
1246
1265
} else {
@@ -1268,7 +1287,7 @@ impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, T: Time> Score for Probabilis
1268
1287
self . channel_liquidities
1269
1288
. entry ( hop. short_channel_id )
1270
1289
. or_insert_with ( ChannelLiquidity :: new)
1271
- . as_directed_mut ( source, & target, capacity_msat, & self . params )
1290
+ . as_directed_mut ( source, & target, 0 , capacity_msat, & self . params )
1272
1291
. successful ( amount_msat, format_args ! ( "SCID {}, towards {:?}" , hop. short_channel_id, target) , & self . logger ) ;
1273
1292
} else {
1274
1293
log_debug ! ( self . logger, "Not able to learn for channel with SCID {} as we do not have graph info for it (likely a route-hint last-hop)." ,
@@ -1873,52 +1892,52 @@ mod tests {
1873
1892
// Update minimum liquidity.
1874
1893
1875
1894
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
1876
- . as_directed ( & source, & target, 1_000 , & scorer. params ) ;
1895
+ . as_directed ( & source, & target, 0 , 1_000 , & scorer. params ) ;
1877
1896
assert_eq ! ( liquidity. min_liquidity_msat( ) , 100 ) ;
1878
1897
assert_eq ! ( liquidity. max_liquidity_msat( ) , 300 ) ;
1879
1898
1880
1899
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
1881
- . as_directed ( & target, & source, 1_000 , & scorer. params ) ;
1900
+ . as_directed ( & target, & source, 0 , 1_000 , & scorer. params ) ;
1882
1901
assert_eq ! ( liquidity. min_liquidity_msat( ) , 700 ) ;
1883
1902
assert_eq ! ( liquidity. max_liquidity_msat( ) , 900 ) ;
1884
1903
1885
1904
scorer. channel_liquidities . get_mut ( & 42 ) . unwrap ( )
1886
- . as_directed_mut ( & source, & target, 1_000 , & scorer. params )
1905
+ . as_directed_mut ( & source, & target, 0 , 1_000 , & scorer. params )
1887
1906
. set_min_liquidity_msat ( 200 ) ;
1888
1907
1889
1908
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
1890
- . as_directed ( & source, & target, 1_000 , & scorer. params ) ;
1909
+ . as_directed ( & source, & target, 0 , 1_000 , & scorer. params ) ;
1891
1910
assert_eq ! ( liquidity. min_liquidity_msat( ) , 200 ) ;
1892
1911
assert_eq ! ( liquidity. max_liquidity_msat( ) , 300 ) ;
1893
1912
1894
1913
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
1895
- . as_directed ( & target, & source, 1_000 , & scorer. params ) ;
1914
+ . as_directed ( & target, & source, 0 , 1_000 , & scorer. params ) ;
1896
1915
assert_eq ! ( liquidity. min_liquidity_msat( ) , 700 ) ;
1897
1916
assert_eq ! ( liquidity. max_liquidity_msat( ) , 800 ) ;
1898
1917
1899
1918
// Update maximum liquidity.
1900
1919
1901
1920
let liquidity = scorer. channel_liquidities . get ( & 43 ) . unwrap ( )
1902
- . as_directed ( & target, & recipient, 1_000 , & scorer. params ) ;
1921
+ . as_directed ( & target, & recipient, 0 , 1_000 , & scorer. params ) ;
1903
1922
assert_eq ! ( liquidity. min_liquidity_msat( ) , 700 ) ;
1904
1923
assert_eq ! ( liquidity. max_liquidity_msat( ) , 900 ) ;
1905
1924
1906
1925
let liquidity = scorer. channel_liquidities . get ( & 43 ) . unwrap ( )
1907
- . as_directed ( & recipient, & target, 1_000 , & scorer. params ) ;
1926
+ . as_directed ( & recipient, & target, 0 , 1_000 , & scorer. params ) ;
1908
1927
assert_eq ! ( liquidity. min_liquidity_msat( ) , 100 ) ;
1909
1928
assert_eq ! ( liquidity. max_liquidity_msat( ) , 300 ) ;
1910
1929
1911
1930
scorer. channel_liquidities . get_mut ( & 43 ) . unwrap ( )
1912
- . as_directed_mut ( & target, & recipient, 1_000 , & scorer. params )
1931
+ . as_directed_mut ( & target, & recipient, 0 , 1_000 , & scorer. params )
1913
1932
. set_max_liquidity_msat ( 200 ) ;
1914
1933
1915
1934
let liquidity = scorer. channel_liquidities . get ( & 43 ) . unwrap ( )
1916
- . as_directed ( & target, & recipient, 1_000 , & scorer. params ) ;
1935
+ . as_directed ( & target, & recipient, 0 , 1_000 , & scorer. params ) ;
1917
1936
assert_eq ! ( liquidity. min_liquidity_msat( ) , 0 ) ;
1918
1937
assert_eq ! ( liquidity. max_liquidity_msat( ) , 200 ) ;
1919
1938
1920
1939
let liquidity = scorer. channel_liquidities . get ( & 43 ) . unwrap ( )
1921
- . as_directed ( & recipient, & target, 1_000 , & scorer. params ) ;
1940
+ . as_directed ( & recipient, & target, 0 , 1_000 , & scorer. params ) ;
1922
1941
assert_eq ! ( liquidity. min_liquidity_msat( ) , 800 ) ;
1923
1942
assert_eq ! ( liquidity. max_liquidity_msat( ) , 1000 ) ;
1924
1943
}
@@ -1942,42 +1961,42 @@ mod tests {
1942
1961
1943
1962
// Check initial bounds.
1944
1963
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
1945
- . as_directed ( & source, & target, 1_000 , & scorer. params ) ;
1964
+ . as_directed ( & source, & target, 0 , 1_000 , & scorer. params ) ;
1946
1965
assert_eq ! ( liquidity. min_liquidity_msat( ) , 400 ) ;
1947
1966
assert_eq ! ( liquidity. max_liquidity_msat( ) , 800 ) ;
1948
1967
1949
1968
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
1950
- . as_directed ( & target, & source, 1_000 , & scorer. params ) ;
1969
+ . as_directed ( & target, & source, 0 , 1_000 , & scorer. params ) ;
1951
1970
assert_eq ! ( liquidity. min_liquidity_msat( ) , 200 ) ;
1952
1971
assert_eq ! ( liquidity. max_liquidity_msat( ) , 600 ) ;
1953
1972
1954
1973
// Reset from source to target.
1955
1974
scorer. channel_liquidities . get_mut ( & 42 ) . unwrap ( )
1956
- . as_directed_mut ( & source, & target, 1_000 , & scorer. params )
1975
+ . as_directed_mut ( & source, & target, 0 , 1_000 , & scorer. params )
1957
1976
. set_min_liquidity_msat ( 900 ) ;
1958
1977
1959
1978
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
1960
- . as_directed ( & source, & target, 1_000 , & scorer. params ) ;
1979
+ . as_directed ( & source, & target, 0 , 1_000 , & scorer. params ) ;
1961
1980
assert_eq ! ( liquidity. min_liquidity_msat( ) , 900 ) ;
1962
1981
assert_eq ! ( liquidity. max_liquidity_msat( ) , 1_000 ) ;
1963
1982
1964
1983
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
1965
- . as_directed ( & target, & source, 1_000 , & scorer. params ) ;
1984
+ . as_directed ( & target, & source, 0 , 1_000 , & scorer. params ) ;
1966
1985
assert_eq ! ( liquidity. min_liquidity_msat( ) , 0 ) ;
1967
1986
assert_eq ! ( liquidity. max_liquidity_msat( ) , 100 ) ;
1968
1987
1969
1988
// Reset from target to source.
1970
1989
scorer. channel_liquidities . get_mut ( & 42 ) . unwrap ( )
1971
- . as_directed_mut ( & target, & source, 1_000 , & scorer. params )
1990
+ . as_directed_mut ( & target, & source, 0 , 1_000 , & scorer. params )
1972
1991
. set_min_liquidity_msat ( 400 ) ;
1973
1992
1974
1993
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
1975
- . as_directed ( & source, & target, 1_000 , & scorer. params ) ;
1994
+ . as_directed ( & source, & target, 0 , 1_000 , & scorer. params ) ;
1976
1995
assert_eq ! ( liquidity. min_liquidity_msat( ) , 0 ) ;
1977
1996
assert_eq ! ( liquidity. max_liquidity_msat( ) , 600 ) ;
1978
1997
1979
1998
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
1980
- . as_directed ( & target, & source, 1_000 , & scorer. params ) ;
1999
+ . as_directed ( & target, & source, 0 , 1_000 , & scorer. params ) ;
1981
2000
assert_eq ! ( liquidity. min_liquidity_msat( ) , 400 ) ;
1982
2001
assert_eq ! ( liquidity. max_liquidity_msat( ) , 1_000 ) ;
1983
2002
}
@@ -2001,42 +2020,42 @@ mod tests {
2001
2020
2002
2021
// Check initial bounds.
2003
2022
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2004
- . as_directed ( & source, & target, 1_000 , & scorer. params ) ;
2023
+ . as_directed ( & source, & target, 0 , 1_000 , & scorer. params ) ;
2005
2024
assert_eq ! ( liquidity. min_liquidity_msat( ) , 400 ) ;
2006
2025
assert_eq ! ( liquidity. max_liquidity_msat( ) , 800 ) ;
2007
2026
2008
2027
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2009
- . as_directed ( & target, & source, 1_000 , & scorer. params ) ;
2028
+ . as_directed ( & target, & source, 0 , 1_000 , & scorer. params ) ;
2010
2029
assert_eq ! ( liquidity. min_liquidity_msat( ) , 200 ) ;
2011
2030
assert_eq ! ( liquidity. max_liquidity_msat( ) , 600 ) ;
2012
2031
2013
2032
// Reset from source to target.
2014
2033
scorer. channel_liquidities . get_mut ( & 42 ) . unwrap ( )
2015
- . as_directed_mut ( & source, & target, 1_000 , & scorer. params )
2034
+ . as_directed_mut ( & source, & target, 0 , 1_000 , & scorer. params )
2016
2035
. set_max_liquidity_msat ( 300 ) ;
2017
2036
2018
2037
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2019
- . as_directed ( & source, & target, 1_000 , & scorer. params ) ;
2038
+ . as_directed ( & source, & target, 0 , 1_000 , & scorer. params ) ;
2020
2039
assert_eq ! ( liquidity. min_liquidity_msat( ) , 0 ) ;
2021
2040
assert_eq ! ( liquidity. max_liquidity_msat( ) , 300 ) ;
2022
2041
2023
2042
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2024
- . as_directed ( & target, & source, 1_000 , & scorer. params ) ;
2043
+ . as_directed ( & target, & source, 0 , 1_000 , & scorer. params ) ;
2025
2044
assert_eq ! ( liquidity. min_liquidity_msat( ) , 700 ) ;
2026
2045
assert_eq ! ( liquidity. max_liquidity_msat( ) , 1_000 ) ;
2027
2046
2028
2047
// Reset from target to source.
2029
2048
scorer. channel_liquidities . get_mut ( & 42 ) . unwrap ( )
2030
- . as_directed_mut ( & target, & source, 1_000 , & scorer. params )
2049
+ . as_directed_mut ( & target, & source, 0 , 1_000 , & scorer. params )
2031
2050
. set_max_liquidity_msat ( 600 ) ;
2032
2051
2033
2052
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2034
- . as_directed ( & source, & target, 1_000 , & scorer. params ) ;
2053
+ . as_directed ( & source, & target, 0 , 1_000 , & scorer. params ) ;
2035
2054
assert_eq ! ( liquidity. min_liquidity_msat( ) , 400 ) ;
2036
2055
assert_eq ! ( liquidity. max_liquidity_msat( ) , 1_000 ) ;
2037
2056
2038
2057
let liquidity = scorer. channel_liquidities . get ( & 42 ) . unwrap ( )
2039
- . as_directed ( & target, & source, 1_000 , & scorer. params ) ;
2058
+ . as_directed ( & target, & source, 0 , 1_000 , & scorer. params ) ;
2040
2059
assert_eq ! ( liquidity. min_liquidity_msat( ) , 0 ) ;
2041
2060
assert_eq ! ( liquidity. max_liquidity_msat( ) , 600 ) ;
2042
2061
}
@@ -2774,6 +2793,14 @@ mod tests {
2774
2793
// data entirely instead.
2775
2794
assert_eq ! ( scorer. historical_estimated_channel_liquidity_probabilities( 42 , & target) ,
2776
2795
Some ( ( [ 0 ; 8 ] , [ 0 ; 8 ] ) ) ) ;
2796
+
2797
+ let usage = ChannelUsage {
2798
+ amount_msat : 100 ,
2799
+ inflight_htlc_msat : 1024 ,
2800
+ effective_capacity : EffectiveCapacity :: Total { capacity_msat : 1_024 , htlc_maximum_msat : 1_024 } ,
2801
+ } ;
2802
+ scorer. payment_path_failed ( & payment_path_for_amount ( 1 ) . iter ( ) . collect :: < Vec < _ > > ( ) , 42 ) ;
2803
+ assert_eq ! ( scorer. channel_penalty_msat( 42 , & source, & target, usage) , 2048 ) ;
2777
2804
}
2778
2805
2779
2806
#[ test]
0 commit comments