Skip to content

Commit 73089c5

Browse files
committed
Configure holder max htlc value in flight function of channel value
refs lightningdevkit#850
1 parent 2873ca6 commit 73089c5

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

lightning/src/ln/channel.rs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ pub(super) struct Channel<Signer: Sign> {
389389
pub(super) counterparty_max_htlc_value_in_flight_msat: u64,
390390
#[cfg(not(test))]
391391
counterparty_max_htlc_value_in_flight_msat: u64,
392-
//get_holder_max_htlc_value_in_flight_msat(): u64,
392+
holder_max_htlc_value_percentage: u64,
393393
/// minimum channel reserve for self to maintain - set by them.
394394
counterparty_selected_channel_reserve_satoshis: u64,
395395
// get_holder_selected_channel_reserve_satoshis(channel_value_sats: u64): u64
@@ -483,8 +483,8 @@ macro_rules! secp_check {
483483

484484
impl<Signer: Sign> Channel<Signer> {
485485
// Convert constants + channel value to limits:
486-
fn get_holder_max_htlc_value_in_flight_msat(channel_value_satoshis: u64) -> u64 {
487-
channel_value_satoshis * 1000 / 10 //TODO
486+
fn get_holder_max_htlc_value_in_flight_msat(&self) -> u64 {
487+
self.channel_value_satoshis * 1000 * self.holder_max_htlc_value_percentage / 100
488488
}
489489

490490
/// Returns a minimum channel reserve value the remote needs to maintain,
@@ -582,6 +582,7 @@ impl<Signer: Sign> Channel<Signer> {
582582
counterparty_max_htlc_value_in_flight_msat: 0,
583583
counterparty_selected_channel_reserve_satoshis: 0,
584584
counterparty_htlc_minimum_msat: 0,
585+
holder_max_htlc_value_percentage: config.own_channel_config.our_htlc_max_in_flight_percentage,
585586
holder_htlc_minimum_msat: if config.own_channel_config.our_htlc_minimum_msat == 0 { 1 } else { config.own_channel_config.our_htlc_minimum_msat },
586587
counterparty_max_accepted_htlcs: 0,
587588
minimum_depth: 0, // Filled in in accept_channel
@@ -820,6 +821,7 @@ impl<Signer: Sign> Channel<Signer> {
820821
counterparty_max_htlc_value_in_flight_msat: cmp::min(msg.max_htlc_value_in_flight_msat, msg.funding_satoshis * 1000),
821822
counterparty_selected_channel_reserve_satoshis: msg.channel_reserve_satoshis,
822823
counterparty_htlc_minimum_msat: msg.htlc_minimum_msat,
824+
holder_max_htlc_value_percentage: config.own_channel_config.our_htlc_max_in_flight_percentage,
823825
holder_htlc_minimum_msat: if config.own_channel_config.our_htlc_minimum_msat == 0 { 1 } else { config.own_channel_config.our_htlc_minimum_msat },
824826
counterparty_max_accepted_htlcs: msg.max_accepted_htlcs,
825827
minimum_depth: config.own_channel_config.minimum_depth,
@@ -1941,7 +1943,7 @@ impl<Signer: Sign> Channel<Signer> {
19411943
if inbound_htlc_count + 1 > OUR_MAX_HTLCS as u32 {
19421944
return Err(ChannelError::Close(format!("Remote tried to push more than our max accepted HTLCs ({})", OUR_MAX_HTLCS)));
19431945
}
1944-
let holder_max_htlc_value_in_flight_msat = Channel::<Signer>::get_holder_max_htlc_value_in_flight_msat(self.channel_value_satoshis);
1946+
let holder_max_htlc_value_in_flight_msat = self.get_holder_max_htlc_value_in_flight_msat();
19451947
if htlc_inbound_value_msat + msg.amount_msat > holder_max_htlc_value_in_flight_msat {
19461948
return Err(ChannelError::Close(format!("Remote HTLC add would put them over our max HTLC value ({})", holder_max_htlc_value_in_flight_msat)));
19471949
}
@@ -3328,7 +3330,7 @@ impl<Signer: Sign> Channel<Signer> {
33283330

33293331
/// Allowed in any state (including after shutdown)
33303332
pub fn get_announced_htlc_max_msat(&self) -> u64 {
3331-
Channel::<Signer>::get_holder_max_htlc_value_in_flight_msat(self.channel_value_satoshis)
3333+
self.get_holder_max_htlc_value_in_flight_msat()
33323334
}
33333335

33343336
/// Allowed in any state (including after shutdown)
@@ -3692,7 +3694,7 @@ impl<Signer: Sign> Channel<Signer> {
36923694
funding_satoshis: self.channel_value_satoshis,
36933695
push_msat: self.channel_value_satoshis * 1000 - self.value_to_self_msat,
36943696
dust_limit_satoshis: self.holder_dust_limit_satoshis,
3695-
max_htlc_value_in_flight_msat: Channel::<Signer>::get_holder_max_htlc_value_in_flight_msat(self.channel_value_satoshis),
3697+
max_htlc_value_in_flight_msat: self.get_holder_max_htlc_value_in_flight_msat(),
36963698
channel_reserve_satoshis: Channel::<Signer>::get_holder_selected_channel_reserve_satoshis(self.channel_value_satoshis),
36973699
htlc_minimum_msat: self.holder_htlc_minimum_msat,
36983700
feerate_per_kw: self.feerate_per_kw as u32,
@@ -3726,7 +3728,7 @@ impl<Signer: Sign> Channel<Signer> {
37263728
msgs::AcceptChannel {
37273729
temporary_channel_id: self.channel_id,
37283730
dust_limit_satoshis: self.holder_dust_limit_satoshis,
3729-
max_htlc_value_in_flight_msat: Channel::<Signer>::get_holder_max_htlc_value_in_flight_msat(self.channel_value_satoshis),
3731+
max_htlc_value_in_flight_msat: self.get_holder_max_htlc_value_in_flight_msat(),
37303732
channel_reserve_satoshis: Channel::<Signer>::get_holder_selected_channel_reserve_satoshis(self.channel_value_satoshis),
37313733
htlc_minimum_msat: self.holder_htlc_minimum_msat,
37323734
minimum_depth: self.minimum_depth,
@@ -4495,6 +4497,7 @@ impl<Signer: Sign> Writeable for Channel<Signer> {
44954497
self.counterparty_dust_limit_satoshis.write(writer)?;
44964498
self.holder_dust_limit_satoshis.write(writer)?;
44974499
self.counterparty_max_htlc_value_in_flight_msat.write(writer)?;
4500+
self.holder_max_htlc_value_percentage.write(writer)?;
44984501
self.counterparty_selected_channel_reserve_satoshis.write(writer)?;
44994502
self.counterparty_htlc_minimum_msat.write(writer)?;
45004503
self.holder_htlc_minimum_msat.write(writer)?;
@@ -4665,6 +4668,7 @@ impl<'a, Signer: Sign, K: Deref> ReadableArgs<&'a K> for Channel<Signer>
46654668
let counterparty_dust_limit_satoshis = Readable::read(reader)?;
46664669
let holder_dust_limit_satoshis = Readable::read(reader)?;
46674670
let counterparty_max_htlc_value_in_flight_msat = Readable::read(reader)?;
4671+
let holder_max_htlc_value_percentage = Readable::read(reader)?;
46684672
let counterparty_selected_channel_reserve_satoshis = Readable::read(reader)?;
46694673
let counterparty_htlc_minimum_msat = Readable::read(reader)?;
46704674
let holder_htlc_minimum_msat = Readable::read(reader)?;
@@ -4745,6 +4749,7 @@ impl<'a, Signer: Sign, K: Deref> ReadableArgs<&'a K> for Channel<Signer>
47454749
counterparty_dust_limit_satoshis,
47464750
holder_dust_limit_satoshis,
47474751
counterparty_max_htlc_value_in_flight_msat,
4752+
holder_max_htlc_value_percentage,
47484753
counterparty_selected_channel_reserve_satoshis,
47494754
counterparty_htlc_minimum_msat,
47504755
holder_htlc_minimum_msat,

lightning/src/util/config.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ pub struct ChannelHandshakeConfig {
4747
/// Default value: 1. If the value is less than 1, it is ignored and set to 1, as is required
4848
/// by the protocol.
4949
pub our_htlc_minimum_msat: u64,
50+
/// Set to percentage of channel value used to control the channel maximum htlc value
51+
pub our_htlc_max_in_flight_percentage: u64,
5052
}
5153

5254
impl Default for ChannelHandshakeConfig {
@@ -55,6 +57,7 @@ impl Default for ChannelHandshakeConfig {
5557
minimum_depth: 6,
5658
our_to_self_delay: BREAKDOWN_TIMEOUT,
5759
our_htlc_minimum_msat: 1,
60+
our_htlc_max_in_flight_percentage: 10,
5861
}
5962
}
6063
}

0 commit comments

Comments
 (0)