@@ -39,7 +39,7 @@ use util::events::ClosureReason;
39
39
use util:: ser:: { Readable , ReadableArgs , Writeable , Writer , VecWriter } ;
40
40
use util:: logger:: Logger ;
41
41
use util:: errors:: APIError ;
42
- use util:: config:: { UserConfig , ChannelConfig , ChannelHandshakeLimits } ;
42
+ use util:: config:: { UserConfig , ChannelConfig , ChannelHandshakeConfig , ChannelHandshakeLimits } ;
43
43
use util:: scid_utils:: scid_from_parts;
44
44
45
45
use io;
@@ -803,9 +803,23 @@ macro_rules! secp_check {
803
803
}
804
804
805
805
impl < Signer : Sign > Channel < Signer > {
806
- // Convert constants + channel value to limits:
807
- fn get_holder_max_htlc_value_in_flight_msat ( channel_value_satoshis : u64 ) -> u64 {
808
- channel_value_satoshis * 1000 / 10 //TODO
806
+ /// Returns the value to use for `holder_max_htlc_value_in_flight_msat` as a percentage of the
807
+ /// `channel_value_satoshis` in msat, based on how many of the percent its been configured to
808
+ /// be set to by the user.
809
+ ///
810
+ /// As we only allow the user to set the percentage to a value between `1-100`, if the user
811
+ /// sets a value less than `1`, the function will result in `1` percent of the
812
+ /// `channel_value_satoshis`, as well as `100` percent if the user has set a value larger
813
+ /// than `100`.
814
+ fn get_holder_max_htlc_value_in_flight_msat ( channel_value_satoshis : u64 , config : & ChannelHandshakeConfig ) -> u64 {
815
+ let configured_percent = if config. max_inbound_htlc_value_in_flight_percent_of_channel < 1 {
816
+ 1
817
+ } else if config. max_inbound_htlc_value_in_flight_percent_of_channel > 100 {
818
+ 100
819
+ } else {
820
+ config. max_inbound_htlc_value_in_flight_percent_of_channel as u64
821
+ } ;
822
+ channel_value_satoshis * 10 * configured_percent
809
823
}
810
824
811
825
/// Returns a minimum channel reserve value the remote needs to maintain,
@@ -964,7 +978,7 @@ impl<Signer: Sign> Channel<Signer> {
964
978
counterparty_dust_limit_satoshis : 0 ,
965
979
holder_dust_limit_satoshis : MIN_CHAN_DUST_LIMIT_SATOSHIS ,
966
980
counterparty_max_htlc_value_in_flight_msat : 0 ,
967
- holder_max_htlc_value_in_flight_msat : Self :: get_holder_max_htlc_value_in_flight_msat ( channel_value_satoshis) ,
981
+ holder_max_htlc_value_in_flight_msat : Self :: get_holder_max_htlc_value_in_flight_msat ( channel_value_satoshis, & config . own_channel_config ) ,
968
982
counterparty_selected_channel_reserve_satoshis : None , // Filled in in accept_channel
969
983
holder_selected_channel_reserve_satoshis,
970
984
counterparty_htlc_minimum_msat : 0 ,
@@ -1282,7 +1296,7 @@ impl<Signer: Sign> Channel<Signer> {
1282
1296
counterparty_dust_limit_satoshis : msg. dust_limit_satoshis ,
1283
1297
holder_dust_limit_satoshis : MIN_CHAN_DUST_LIMIT_SATOSHIS ,
1284
1298
counterparty_max_htlc_value_in_flight_msat : cmp:: min ( msg. max_htlc_value_in_flight_msat , msg. funding_satoshis * 1000 ) ,
1285
- holder_max_htlc_value_in_flight_msat : Self :: get_holder_max_htlc_value_in_flight_msat ( msg. funding_satoshis ) ,
1299
+ holder_max_htlc_value_in_flight_msat : Self :: get_holder_max_htlc_value_in_flight_msat ( msg. funding_satoshis , & config . own_channel_config ) ,
1286
1300
counterparty_selected_channel_reserve_satoshis : Some ( msg. channel_reserve_satoshis ) ,
1287
1301
holder_selected_channel_reserve_satoshis,
1288
1302
counterparty_htlc_minimum_msat : msg. htlc_minimum_msat ,
@@ -5877,13 +5891,15 @@ impl<Signer: Sign> Writeable for Channel<Signer> {
5877
5891
let chan_type = if self . channel_type != ChannelTypeFeatures :: only_static_remote_key ( ) {
5878
5892
Some ( & self . channel_type ) } else { None } ;
5879
5893
5880
- // The same logic applies for `holder_selected_channel_reserve_satoshis` and
5881
- // `holder_max_htlc_value_in_flight_msat` values other than the defaults.
5894
+ // The same logic applies for `holder_selected_channel_reserve_satoshis` values other than
5895
+ // the default, and when `holder_max_htlc_value_in_flight_msat` is configured to be set to
5896
+ // a different percentage of the channel value then the default value of
5897
+ // `ChannelHandshakeConfig::max_inbound_htlc_value_in_flight_percent_of_channel`.
5882
5898
let serialized_holder_selected_reserve =
5883
5899
if self . holder_selected_channel_reserve_satoshis != Self :: get_holder_selected_channel_reserve_satoshis ( self . channel_value_satoshis )
5884
5900
{ Some ( self . holder_selected_channel_reserve_satoshis ) } else { None } ;
5885
5901
let serialized_holder_htlc_max_in_flight =
5886
- if self . holder_max_htlc_value_in_flight_msat != Self :: get_holder_max_htlc_value_in_flight_msat ( self . channel_value_satoshis )
5902
+ if self . holder_max_htlc_value_in_flight_msat != Self :: get_holder_max_htlc_value_in_flight_msat ( self . channel_value_satoshis , & UserConfig :: default ( ) . own_channel_config )
5887
5903
{ Some ( self . holder_max_htlc_value_in_flight_msat ) } else { None } ;
5888
5904
5889
5905
write_tlv_fields ! ( writer, {
@@ -6153,7 +6169,7 @@ impl<'a, Signer: Sign, K: Deref> ReadableArgs<(&'a K, u32)> for Channel<Signer>
6153
6169
let mut target_closing_feerate_sats_per_kw = None ;
6154
6170
let mut monitor_pending_finalized_fulfills = Some ( Vec :: new ( ) ) ;
6155
6171
let mut holder_selected_channel_reserve_satoshis = Some ( Self :: get_holder_selected_channel_reserve_satoshis ( channel_value_satoshis) ) ;
6156
- let mut holder_max_htlc_value_in_flight_msat = Some ( Self :: get_holder_max_htlc_value_in_flight_msat ( channel_value_satoshis) ) ;
6172
+ let mut holder_max_htlc_value_in_flight_msat = Some ( Self :: get_holder_max_htlc_value_in_flight_msat ( channel_value_satoshis, & UserConfig :: default ( ) . own_channel_config ) ) ;
6157
6173
// Prior to supporting channel type negotiation, all of our channels were static_remotekey
6158
6174
// only, so we default to that if none was written.
6159
6175
let mut channel_type = Some ( ChannelTypeFeatures :: only_static_remote_key ( ) ) ;
0 commit comments