Skip to content

Commit f048d8c

Browse files
committed
fix Msat-Sat discrepancy in balance/reserve check
1 parent 1f1b6bf commit f048d8c

File tree

1 file changed

+19
-14
lines changed

1 file changed

+19
-14
lines changed

lightning/src/ln/channel.rs

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10536,25 +10536,29 @@ where
1053610536
}
1053710537

1053810538
/// Check that post-splicing balance meets reserve requirements, but only if it met it pre-splice as well
10539+
/// Check that post-splicing balance meets reserve requirements, but only if it met it pre-splice as well.
10540+
/// Returns the minimum channel reserve (sats)
1053910541
#[cfg(splicing)]
1054010542
pub fn check_splice_balance_meets_v2_reserve_requirement_noerr(
1054110543
&self, pre_balance: u64, post_balance: u64, pre_channel_value: u64,
1054210544
post_channel_value: u64, dust_limit: u64,
1054310545
) -> Result<(), u64> {
10544-
let post_channel_reserve = get_v2_channel_reserve_satoshis(post_channel_value, dust_limit);
10545-
if post_balance >= post_channel_reserve {
10546+
let post_channel_reserve_sats =
10547+
get_v2_channel_reserve_satoshis(post_channel_value, dust_limit);
10548+
if post_balance >= post_channel_reserve_sats * 1000 {
1054610549
return Ok(());
1054710550
}
10548-
let pre_channel_reserve = get_v2_channel_reserve_satoshis(pre_channel_value, dust_limit);
10549-
if pre_balance >= pre_channel_reserve {
10551+
let pre_channel_reserve_sats =
10552+
get_v2_channel_reserve_satoshis(pre_channel_value, dust_limit);
10553+
if pre_balance >= pre_channel_reserve_sats * 1000 {
1055010554
// We're not allowed to dip below the reserve once we've been above.
10551-
return Err(post_channel_reserve);
10555+
return Err(post_channel_reserve_sats);
1055210556
}
1055310557
// Make sure we either remain with the same balance or move towards the reserve.
1055410558
if post_balance >= pre_balance {
1055510559
Ok(())
1055610560
} else {
10557-
Err(post_channel_reserve)
10561+
Err(post_channel_reserve_sats)
1055810562
}
1055910563
}
1056010564

@@ -10563,33 +10567,34 @@ where
1056310567
/// to check with new channel value (before being committed to it).
1056410568
#[cfg(splicing)]
1056510569
pub fn check_splice_balances_meet_v2_reserve_requirements(
10566-
&self, self_balance_pre: u64, self_balance_post: u64, counterparty_balance_pre: u64,
10567-
counterparty_balance_post: u64, channel_value_pre: u64, channel_value_post: u64,
10570+
&self, self_balance_pre_msat: u64, self_balance_post_msat: u64,
10571+
counterparty_balance_pre_msat: u64, counterparty_balance_post_msat: u64,
10572+
channel_value_pre: u64, channel_value_post: u64,
1056810573
) -> Result<(), ChannelError> {
1056910574
let is_ok_self = self.check_splice_balance_meets_v2_reserve_requirement_noerr(
10570-
self_balance_pre,
10571-
self_balance_post,
10575+
self_balance_pre_msat,
10576+
self_balance_post_msat,
1057210577
channel_value_pre,
1057310578
channel_value_post,
1057410579
self.context.holder_dust_limit_satoshis,
1057510580
);
1057610581
if let Err(channel_reserve_self) = is_ok_self {
1057710582
return Err(ChannelError::Warn(format!(
1057810583
"Balance below reserve, mandated by holder, {} vs {}",
10579-
self_balance_post, channel_reserve_self,
10584+
self_balance_post_msat, channel_reserve_self,
1058010585
)));
1058110586
}
1058210587
let is_ok_cp = self.check_splice_balance_meets_v2_reserve_requirement_noerr(
10583-
counterparty_balance_pre,
10584-
counterparty_balance_post,
10588+
counterparty_balance_pre_msat,
10589+
counterparty_balance_post_msat,
1058510590
channel_value_pre,
1058610591
channel_value_post,
1058710592
self.context.counterparty_dust_limit_satoshis,
1058810593
);
1058910594
if let Err(channel_reserve_cp) = is_ok_cp {
1059010595
return Err(ChannelError::Warn(format!(
1059110596
"Balance below reserve mandated by counterparty, {} vs {}",
10592-
counterparty_balance_post, channel_reserve_cp,
10597+
counterparty_balance_post_msat, channel_reserve_cp,
1059310598
)));
1059410599
}
1059510600
Ok(())

0 commit comments

Comments
 (0)