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:
parent
bf0776e3dd
commit
7c186e6081
|
@ -86,13 +86,12 @@ impl Amount {
|
||||||
/// Returns [`None`] if overflow occurred or if `fee_rate` is zero.
|
/// Returns [`None`] if overflow occurred or if `fee_rate` is zero.
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub const fn checked_div_by_fee_rate_floor(self, fee_rate: FeeRate) -> Option<Weight> {
|
pub const fn checked_div_by_fee_rate_floor(self, fee_rate: FeeRate) -> Option<Weight> {
|
||||||
match self.to_sat().checked_mul(1000) {
|
if let Some(msats) = self.to_sat().checked_mul(1000) {
|
||||||
Some(amount_msats) => match amount_msats.checked_div(fee_rate.to_sat_per_kwu_ceil()) {
|
if let Some(wu) = msats.checked_div(fee_rate.to_sat_per_kwu_ceil()) {
|
||||||
Some(wu) => Some(Weight::from_wu(wu)),
|
return Some(Weight::from_wu(wu));
|
||||||
None => None,
|
}
|
||||||
},
|
|
||||||
None => None,
|
|
||||||
}
|
}
|
||||||
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Checked fee rate ceiling division.
|
/// 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> {
|
pub const fn checked_div_by_fee_rate_ceil(self, fee_rate: FeeRate) -> Option<Weight> {
|
||||||
// Use ceil because result is used as the divisor.
|
// Use ceil because result is used as the divisor.
|
||||||
let rate = fee_rate.to_sat_per_kwu_ceil();
|
let rate = fee_rate.to_sat_per_kwu_ceil();
|
||||||
match self.to_sat().checked_mul(1000) {
|
if rate == 0 {
|
||||||
Some(amount_msats) => match rate.checked_sub(1) {
|
return None;
|
||||||
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 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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue