Skip to content

Commit 31245c3

Browse files
committed
fix Msat-Sat discrepancy in balance/reserve check
1 parent 77768a8 commit 31245c3

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
@@ -10696,25 +10696,29 @@ where
1069610696
}
1069710697

1069810698
/// Check that post-splicing balance meets reserve requirements, but only if it met it pre-splice as well
10699+
/// Check that post-splicing balance meets reserve requirements, but only if it met it pre-splice as well.
10700+
/// Returns the minimum channel reserve (sats)
1069910701
#[cfg(splicing)]
1070010702
pub fn check_splice_balance_meets_v2_reserve_requirement_noerr(
1070110703
&self, pre_balance: u64, post_balance: u64, pre_channel_value: u64,
1070210704
post_channel_value: u64, dust_limit: u64,
1070310705
) -> Result<(), u64> {
10704-
let post_channel_reserve = get_v2_channel_reserve_satoshis(post_channel_value, dust_limit);
10705-
if post_balance >= post_channel_reserve {
10706+
let post_channel_reserve_sats =
10707+
get_v2_channel_reserve_satoshis(post_channel_value, dust_limit);
10708+
if post_balance >= post_channel_reserve_sats * 1000 {
1070610709
return Ok(());
1070710710
}
10708-
let pre_channel_reserve = get_v2_channel_reserve_satoshis(pre_channel_value, dust_limit);
10709-
if pre_balance >= pre_channel_reserve {
10711+
let pre_channel_reserve_sats =
10712+
get_v2_channel_reserve_satoshis(pre_channel_value, dust_limit);
10713+
if pre_balance >= pre_channel_reserve_sats * 1000 {
1071010714
// We're not allowed to dip below the reserve once we've been above.
10711-
return Err(post_channel_reserve);
10715+
return Err(post_channel_reserve_sats);
1071210716
}
1071310717
// Make sure we either remain with the same balance or move towards the reserve.
1071410718
if post_balance >= pre_balance {
1071510719
Ok(())
1071610720
} else {
10717-
Err(post_channel_reserve)
10721+
Err(post_channel_reserve_sats)
1071810722
}
1071910723
}
1072010724

@@ -10723,33 +10727,34 @@ where
1072310727
/// to check with new channel value (before being committed to it).
1072410728
#[cfg(splicing)]
1072510729
pub fn check_splice_balances_meet_v2_reserve_requirements(
10726-
&self, self_balance_pre: u64, self_balance_post: u64, counterparty_balance_pre: u64,
10727-
counterparty_balance_post: u64, channel_value_pre: u64, channel_value_post: u64,
10730+
&self, self_balance_pre_msat: u64, self_balance_post_msat: u64,
10731+
counterparty_balance_pre_msat: u64, counterparty_balance_post_msat: u64,
10732+
channel_value_pre: u64, channel_value_post: u64,
1072810733
) -> Result<(), ChannelError> {
1072910734
let is_ok_self = self.check_splice_balance_meets_v2_reserve_requirement_noerr(
10730-
self_balance_pre,
10731-
self_balance_post,
10735+
self_balance_pre_msat,
10736+
self_balance_post_msat,
1073210737
channel_value_pre,
1073310738
channel_value_post,
1073410739
self.context.holder_dust_limit_satoshis,
1073510740
);
1073610741
if let Err(channel_reserve_self) = is_ok_self {
1073710742
return Err(ChannelError::Warn(format!(
1073810743
"Balance below reserve, mandated by holder, {} vs {}",
10739-
self_balance_post, channel_reserve_self,
10744+
self_balance_post_msat, channel_reserve_self,
1074010745
)));
1074110746
}
1074210747
let is_ok_cp = self.check_splice_balance_meets_v2_reserve_requirement_noerr(
10743-
counterparty_balance_pre,
10744-
counterparty_balance_post,
10748+
counterparty_balance_pre_msat,
10749+
counterparty_balance_post_msat,
1074510750
channel_value_pre,
1074610751
channel_value_post,
1074710752
self.context.counterparty_dust_limit_satoshis,
1074810753
);
1074910754
if let Err(channel_reserve_cp) = is_ok_cp {
1075010755
return Err(ChannelError::Warn(format!(
1075110756
"Balance below reserve mandated by counterparty, {} vs {}",
10752-
counterparty_balance_post, channel_reserve_cp,
10757+
counterparty_balance_post_msat, channel_reserve_cp,
1075310758
)));
1075410759
}
1075510760
Ok(())

0 commit comments

Comments
 (0)