diff --git a/units/src/amount/unsigned.rs b/units/src/amount/unsigned.rs index f6cb57eb5..96e372302 100644 --- a/units/src/amount/unsigned.rs +++ b/units/src/amount/unsigned.rs @@ -375,7 +375,7 @@ impl Amount { pub const fn checked_div_by_weight_ceil(self, weight: Weight) -> Option { let wu = weight.to_wu(); // No `?` operator in const context. - if let Some(sats) = self.0.checked_mul(1_000) { + if let Some(sats) = self.to_sat().checked_mul(1_000) { if let Some(wu_minus_one) = wu.checked_sub(1) { if let Some(sats_plus_wu_minus_one) = sats.checked_add(wu_minus_one) { if let Some(fee_rate) = sats_plus_wu_minus_one.checked_div(wu) { @@ -397,7 +397,7 @@ impl Amount { #[must_use] pub const fn checked_div_by_weight_floor(self, weight: Weight) -> Option { // No `?` operator in const context. - match self.0.checked_mul(1_000) { + match self.to_sat().checked_mul(1_000) { Some(res) => match res.checked_div(weight.to_wu()) { Some(fee_rate) => Some(FeeRate::from_sat_per_kwu(fee_rate)), None => None, diff --git a/units/src/fee_rate/mod.rs b/units/src/fee_rate/mod.rs index 2b5fe8205..938a518ff 100644 --- a/units/src/fee_rate/mod.rs +++ b/units/src/fee_rate/mod.rs @@ -112,7 +112,7 @@ impl FeeRate { #[must_use] pub const fn checked_mul_by_weight(self, weight: Weight) -> Option { // No `?` operator in const context. - match self.0.checked_mul(weight.to_wu()) { + match self.to_sat_per_kwu().checked_mul(weight.to_wu()) { Some(mul_res) => match mul_res.checked_add(999) { Some(add_res) => Some(Amount::from_sat(add_res / 1000)), None => None, @@ -216,7 +216,9 @@ impl ops::Div for Amount { /// /// This is likely the wrong thing for a user dividing an amount by a weight. Consider using /// `checked_div_by_weight` instead. - fn div(self, rhs: Weight) -> Self::Output { FeeRate(self.to_sat() * 1000 / rhs.to_wu()) } + fn div(self, rhs: Weight) -> Self::Output { + FeeRate::from_sat_per_kwu(self.to_sat() * 1000 / rhs.to_wu()) + } } impl core::iter::Sum for FeeRate { @@ -324,7 +326,7 @@ mod tests { #[test] fn fee_rate_div_by_weight() { let fee_rate = Amount::from_sat(329) / Weight::from_wu(381); - assert_eq!(fee_rate, FeeRate(863)); + assert_eq!(fee_rate, FeeRate::from_sat_per_kwu(863)); } #[test] @@ -402,7 +404,7 @@ mod tests { #[test] fn fee_wu() { - let fee_overflow = FeeRate(10).fee_wu(Weight::MAX); + let fee_overflow = FeeRate::from_sat_per_kwu(10).fee_wu(Weight::MAX); assert!(fee_overflow.is_none()); let fee_rate = FeeRate::from_sat_per_vb(2).unwrap(); @@ -412,7 +414,7 @@ mod tests { #[test] fn fee_vb() { - let fee_overflow = FeeRate(10).fee_vb(Weight::MAX.to_wu()); + let fee_overflow = FeeRate::from_sat_per_kwu(10).fee_vb(Weight::MAX.to_wu()); assert!(fee_overflow.is_none()); let fee_rate = FeeRate::from_sat_per_vb(2).unwrap(); @@ -428,7 +430,7 @@ mod tests { .expect("expected Amount"); assert_eq!(Amount::from_sat(100), fee); - let fee = FeeRate(10).checked_mul_by_weight(Weight::MAX); + let fee = FeeRate::from_sat_per_kwu(10).checked_mul_by_weight(Weight::MAX); assert!(fee.is_none()); let weight = Weight::from_vb(3).unwrap();