Refactor fee functions

The `fee` functions are a bit convoluted because of the usage of
`const`. Refactor a couple of them to be easier to read.

Internal change only.
This commit is contained in:
Tobin C. Harding 2025-05-26 07:45:20 +01:00
parent bf0776e3dd
commit 7c186e6081
No known key found for this signature in database
GPG Key ID: 0AEF0A899E41F7DD
1 changed files with 16 additions and 18 deletions

View File

@ -86,14 +86,13 @@ impl Amount {
/// Returns [`None`] if overflow occurred or if `fee_rate` is zero.
#[must_use]
pub const fn checked_div_by_fee_rate_floor(self, fee_rate: FeeRate) -> Option<Weight> {
match self.to_sat().checked_mul(1000) {
Some(amount_msats) => match amount_msats.checked_div(fee_rate.to_sat_per_kwu_ceil()) {
Some(wu) => Some(Weight::from_wu(wu)),
None => None,
},
None => None,
if let Some(msats) = self.to_sat().checked_mul(1000) {
if let Some(wu) = msats.checked_div(fee_rate.to_sat_per_kwu_ceil()) {
return Some(Weight::from_wu(wu));
}
}
None
}
/// Checked fee rate ceiling division.
///
@ -105,19 +104,18 @@ impl Amount {
pub const fn checked_div_by_fee_rate_ceil(self, fee_rate: FeeRate) -> Option<Weight> {
// Use ceil because result is used as the divisor.
let rate = fee_rate.to_sat_per_kwu_ceil();
match self.to_sat().checked_mul(1000) {
Some(amount_msats) => match rate.checked_sub(1) {
Some(rate_minus_one) => match amount_msats.checked_add(rate_minus_one) {
Some(rounded_msats) => match rounded_msats.checked_div(rate) {
Some(wu) => Some(Weight::from_wu(wu)),
None => None,
},
None => None,
},
None => None,
},
None => None,
if rate == 0 {
return None;
}
if let Some(msats) = self.to_sat().checked_mul(1000) {
// No need to used checked arithmetic because rate is non-zero.
if let Some(bump) = msats.checked_add(rate - 1) {
let wu = bump / rate;
return Some(Weight::from_wu(wu));
}
}
None
}
}