Skip to content

Commit 64e381b

Browse files
committed
fix Msat-Sat discrepancy in balance/reserve check
1 parent 6ffa569 commit 64e381b

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
@@ -11087,25 +11087,29 @@ where
1108711087
}
1108811088

1108911089
/// Check that post-splicing balance meets reserve requirements, but only if it met it pre-splice as well
11090+
/// Check that post-splicing balance meets reserve requirements, but only if it met it pre-splice as well.
11091+
/// Returns the minimum channel reserve (sats)
1109011092
#[cfg(splicing)]
1109111093
pub fn check_splice_balance_meets_v2_reserve_requirement_noerr(
1109211094
&self, pre_balance: u64, post_balance: u64, pre_channel_value: u64,
1109311095
post_channel_value: u64, dust_limit: u64,
1109411096
) -> Result<(), u64> {
11095-
let post_channel_reserve = get_v2_channel_reserve_satoshis(post_channel_value, dust_limit);
11096-
if post_balance >= post_channel_reserve {
11097+
let post_channel_reserve_sats =
11098+
get_v2_channel_reserve_satoshis(post_channel_value, dust_limit);
11099+
if post_balance >= post_channel_reserve_sats * 1000 {
1109711100
return Ok(());
1109811101
}
11099-
let pre_channel_reserve = get_v2_channel_reserve_satoshis(pre_channel_value, dust_limit);
11100-
if pre_balance >= pre_channel_reserve {
11102+
let pre_channel_reserve_sats =
11103+
get_v2_channel_reserve_satoshis(pre_channel_value, dust_limit);
11104+
if pre_balance >= pre_channel_reserve_sats * 1000 {
1110111105
// We're not allowed to dip below the reserve once we've been above.
11102-
return Err(post_channel_reserve);
11106+
return Err(post_channel_reserve_sats);
1110311107
}
1110411108
// Make sure we either remain with the same balance or move towards the reserve.
1110511109
if post_balance >= pre_balance {
1110611110
Ok(())
1110711111
} else {
11108-
Err(post_channel_reserve)
11112+
Err(post_channel_reserve_sats)
1110911113
}
1111011114
}
1111111115

@@ -11114,33 +11118,34 @@ where
1111411118
/// to check with new channel value (before being committed to it).
1111511119
#[cfg(splicing)]
1111611120
pub fn check_splice_balances_meet_v2_reserve_requirements(
11117-
&self, self_balance_pre: u64, self_balance_post: u64, counterparty_balance_pre: u64,
11118-
counterparty_balance_post: u64, channel_value_pre: u64, channel_value_post: u64,
11121+
&self, self_balance_pre_msat: u64, self_balance_post_msat: u64,
11122+
counterparty_balance_pre_msat: u64, counterparty_balance_post_msat: u64,
11123+
channel_value_pre: u64, channel_value_post: u64,
1111911124
) -> Result<(), ChannelError> {
1112011125
let is_ok_self = self.check_splice_balance_meets_v2_reserve_requirement_noerr(
11121-
self_balance_pre,
11122-
self_balance_post,
11126+
self_balance_pre_msat,
11127+
self_balance_post_msat,
1112311128
channel_value_pre,
1112411129
channel_value_post,
1112511130
self.context.holder_dust_limit_satoshis,
1112611131
);
1112711132
if let Err(channel_reserve_self) = is_ok_self {
1112811133
return Err(ChannelError::Warn(format!(
1112911134
"Balance below reserve, mandated by holder, {} vs {}",
11130-
self_balance_post, channel_reserve_self,
11135+
self_balance_post_msat, channel_reserve_self,
1113111136
)));
1113211137
}
1113311138
let is_ok_cp = self.check_splice_balance_meets_v2_reserve_requirement_noerr(
11134-
counterparty_balance_pre,
11135-
counterparty_balance_post,
11139+
counterparty_balance_pre_msat,
11140+
counterparty_balance_post_msat,
1113611141
channel_value_pre,
1113711142
channel_value_post,
1113811143
self.context.counterparty_dust_limit_satoshis,
1113911144
);
1114011145
if let Err(channel_reserve_cp) = is_ok_cp {
1114111146
return Err(ChannelError::Warn(format!(
1114211147
"Balance below reserve mandated by counterparty, {} vs {}",
11143-
counterparty_balance_post, channel_reserve_cp,
11148+
counterparty_balance_post_msat, channel_reserve_cp,
1114411149
)));
1114511150
}
1114611151
Ok(())

0 commit comments

Comments
 (0)