Skip to main content

FeeRate

Struct FeeRate 

Source
pub struct FeeRate(/* private fields */);
Expand description

Fee rate.

This is an integer newtype representing fee rate. It provides protection against mixing up the types, conversion functions, and basic formatting.

NOTE: FeeRate explicitly does not have any format/display trait implementations, as it doesn’t have a standard unit for measure. Users are expected to format it on their own by extracting values in desired units with from_sat_per* functions.

Implementations§

Source§

impl FeeRate

Source

pub const ZERO: Self

The zero fee rate.

Equivalent to MIN, may better express intent in some contexts.

Source

pub const MIN: Self = Self::ZERO

The minimum possible value.

Equivalent to ZERO, may better express intent in some contexts.

Source

pub const MAX: Self

The maximum possible value.

Source

pub const BROADCAST_MIN: Self

The minimum fee rate required to broadcast a transaction.

The value matches the default Bitcoin Core policy at the time of library release.

Source

pub const DUST: Self

The fee rate used to compute dust amount.

Source

pub const fn from_sat_per_kwu(sat_kwu: u32) -> Self

Constructs a new FeeRate from satoshis per 1000 weight units.

Source

pub const fn from_per_kwu(rate: Amount) -> NumOpResult<Self>

Constructs a new FeeRate from amount per 1000 weight units.

Source

pub const fn from_sat_per_vb(sat_vb: u32) -> Self

Constructs a new FeeRate from satoshis per virtual byte.

Source

pub const fn from_per_vb(rate: Amount) -> NumOpResult<Self>

Constructs a new FeeRate from amount per virtual byte.

Source

pub const fn from_sat_per_kvb(sat_kvb: u32) -> Self

Constructs a new FeeRate from satoshis per kilo virtual bytes (1,000 vbytes).

Source

pub const fn from_per_kvb(rate: Amount) -> NumOpResult<Self>

Constructs a new FeeRate from satoshis per kilo virtual bytes (1,000 vbytes).

Source

pub const fn to_sat_per_kwu_floor(self) -> u64

Converts to sat/kwu rounding down.

Source

pub const fn to_sat_per_kwu_ceil(self) -> u64

Converts to sat/kwu rounding up.

Source

pub const fn to_sat_per_vb_floor(self) -> u64

Converts to sat/vB rounding down.

Source

pub const fn to_sat_per_vb_ceil(self) -> u64

Converts to sat/vB rounding up.

Source

pub const fn to_sat_per_kvb_floor(self) -> u64

Converts to sat/kvb rounding down.

Source

pub const fn to_sat_per_kvb_ceil(self) -> u64

Converts to sat/kvb rounding up.

Source

pub const fn checked_mul(self, rhs: u64) -> Option<Self>

Checked multiplication.

Computes self * rhs, returning None if overflow occurred.

Source

pub const fn checked_div(self, rhs: u64) -> Option<Self>

Checked division.

Computes self / rhs returning None if rhs == 0.

Source

pub const fn checked_add(self, rhs: Self) -> Option<Self>

Checked addition.

Computes self + rhs returning None in case of overflow.

Source

pub const fn checked_sub(self, rhs: Self) -> Option<Self>

Checked subtraction.

Computes self - rhs, returning None if overflow occurred.

Source

pub const fn to_fee(self, weight: Weight) -> Amount

Calculates the fee by multiplying this fee rate by weight.

Computes the absolute fee amount for a given Weight at this fee rate. When the resulting fee is a non-integer amount, the amount is rounded up, ensuring that the transaction fee is enough instead of falling short if rounded down.

If the calculation would overflow we saturate to Amount::MAX. Since such a fee can never be paid this is meaningful as an error case while still removing the possibility of silently wrapping.

Source

pub fn fee_wu(self, weight: Weight) -> Option<Amount>

👎Deprecated since 1.0.0-rc.0: use to_fee() instead

Calculates the fee by multiplying this fee rate by weight, in weight units, returning None if an overflow occurred.

This is equivalent to Self::mul_by_weight(weight).ok().

Source

pub fn fee_vb(self, vb: u64) -> Option<Amount>

👎Deprecated since 1.0.0-rc.0: use Weight::from_vb and then to_fee() instead

Calculates the fee by multiplying this fee rate by weight, in virtual bytes, returning None if vb cannot be represented as Weight.

This is equivalent to converting vb to Weight using Weight::from_vb and then calling Self::to_fee.

Source

pub const fn mul_by_weight(self, weight: Weight) -> NumOpResult<Amount>

Checked weight multiplication.

Computes the absolute fee amount for a given Weight at this fee rate. When the resulting fee is a non-integer amount, the amount is rounded up, ensuring that the transaction fee is enough instead of falling short if rounded down.

Trait Implementations§

Source§

impl<'a> Add<&'a FeeRate> for &FeeRate

Source§

type Output = <FeeRate as Add>::Output

The resulting type after applying the + operator.
Source§

fn add(self, rhs: &FeeRate) -> Self::Output

Performs the + operation. Read more
Source§

impl Add<&FeeRate> for FeeRate

Source§

type Output = <FeeRate as Add>::Output

The resulting type after applying the + operator.
Source§

fn add(self, rhs: &FeeRate) -> Self::Output

Performs the + operation. Read more
Source§

impl Add<FeeRate> for &FeeRate

Source§

type Output = <FeeRate as Add>::Output

The resulting type after applying the + operator.
Source§

fn add(self, rhs: FeeRate) -> Self::Output

Performs the + operation. Read more
Source§

impl Add for FeeRate

Source§

type Output = FeeRate

The resulting type after applying the + operator.
Source§

fn add(self, rhs: FeeRate) -> Self::Output

Performs the + operation. Read more
Source§

impl AddAssign<&FeeRate> for FeeRate

Source§

fn add_assign(&mut self, rhs: &FeeRate)

Performs the += operation. Read more
Source§

impl AddAssign for FeeRate

Source§

fn add_assign(&mut self, rhs: FeeRate)

Performs the += operation. Read more
Source§

impl<'a> Arbitrary<'a> for FeeRate

Available on crate feature arbitrary only.
Source§

fn arbitrary(u: &mut Unstructured<'a>) -> Result<Self>

Generate an arbitrary value of Self from the given unstructured data. Read more
Source§

fn arbitrary_take_rest(u: Unstructured<'a>) -> Result<Self, Error>

Generate an arbitrary value of Self from the entirety of the given unstructured data. Read more
Source§

fn size_hint(depth: usize) -> (usize, Option<usize>)

Get a size hint for how many bytes out of an Unstructured this type needs to construct itself. Read more
Source§

fn try_size_hint( depth: usize, ) -> Result<(usize, Option<usize>), MaxRecursionReached>

Get a size hint for how many bytes out of an Unstructured this type needs to construct itself. Read more
Source§

impl Clone for FeeRate

Source§

fn clone(&self) -> FeeRate

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for FeeRate

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'a> Div<&'a FeeRate> for &Amount

Source§

type Output = <Amount as Div<FeeRate>>::Output

The resulting type after applying the / operator.
Source§

fn div(self, rhs: &FeeRate) -> Self::Output

Performs the / operation. Read more
Source§

impl<'a> Div<&'a FeeRate> for &NumOpResult<Amount>

Source§

type Output = <NumOpResult<Amount> as Div<FeeRate>>::Output

The resulting type after applying the / operator.
Source§

fn div(self, rhs: &FeeRate) -> Self::Output

Performs the / operation. Read more
Source§

impl Div<&FeeRate> for Amount

Source§

type Output = <Amount as Div<FeeRate>>::Output

The resulting type after applying the / operator.
Source§

fn div(self, rhs: &FeeRate) -> Self::Output

Performs the / operation. Read more
Source§

impl Div<&FeeRate> for NumOpResult<Amount>

Source§

type Output = <NumOpResult<Amount> as Div<FeeRate>>::Output

The resulting type after applying the / operator.
Source§

fn div(self, rhs: &FeeRate) -> Self::Output

Performs the / operation. Read more
Source§

impl<'a> Div<&'a NonZero<u64>> for &FeeRate

Source§

type Output = <FeeRate as Div<NonZero<u64>>>::Output

The resulting type after applying the / operator.
Source§

fn div(self, rhs: &NonZeroU64) -> Self::Output

Performs the / operation. Read more
Source§

impl Div<&NonZero<u64>> for FeeRate

Source§

type Output = <FeeRate as Div<NonZero<u64>>>::Output

The resulting type after applying the / operator.
Source§

fn div(self, rhs: &NonZeroU64) -> Self::Output

Performs the / operation. Read more
Source§

impl Div<FeeRate> for &Amount

Source§

type Output = <Amount as Div<FeeRate>>::Output

The resulting type after applying the / operator.
Source§

fn div(self, rhs: FeeRate) -> Self::Output

Performs the / operation. Read more
Source§

impl Div<FeeRate> for &NumOpResult<Amount>

Source§

type Output = <NumOpResult<Amount> as Div<FeeRate>>::Output

The resulting type after applying the / operator.
Source§

fn div(self, rhs: FeeRate) -> Self::Output

Performs the / operation. Read more
Source§

impl Div<FeeRate> for Amount

Source§

type Output = NumOpResult<Weight>

The resulting type after applying the / operator.
Source§

fn div(self, rhs: FeeRate) -> Self::Output

Performs the / operation. Read more
Source§

impl Div<FeeRate> for NumOpResult<Amount>

Source§

type Output = NumOpResult<Weight>

The resulting type after applying the / operator.
Source§

fn div(self, rhs: FeeRate) -> Self::Output

Performs the / operation. Read more
Source§

impl Div<NonZero<u64>> for &FeeRate

Source§

type Output = <FeeRate as Div<NonZero<u64>>>::Output

The resulting type after applying the / operator.
Source§

fn div(self, rhs: NonZeroU64) -> Self::Output

Performs the / operation. Read more
Source§

impl Div<NonZero<u64>> for FeeRate

Source§

type Output = FeeRate

The resulting type after applying the / operator.
Source§

fn div(self, rhs: NonZeroU64) -> Self::Output

Performs the / operation. Read more
Source§

impl Hash for FeeRate

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<'a> Mul<&'a FeeRate> for &NumOpResult<Weight>

Source§

type Output = <NumOpResult<Weight> as Mul<FeeRate>>::Output

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: &FeeRate) -> Self::Output

Performs the * operation. Read more
Source§

impl<'a> Mul<&'a FeeRate> for &Weight

Source§

type Output = <Weight as Mul<FeeRate>>::Output

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: &FeeRate) -> Self::Output

Performs the * operation. Read more
Source§

impl Mul<&FeeRate> for NumOpResult<Weight>

Source§

type Output = <NumOpResult<Weight> as Mul<FeeRate>>::Output

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: &FeeRate) -> Self::Output

Performs the * operation. Read more
Source§

impl Mul<&FeeRate> for Weight

Source§

type Output = <Weight as Mul<FeeRate>>::Output

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: &FeeRate) -> Self::Output

Performs the * operation. Read more
Source§

impl<'a> Mul<&'a NumOpResult<Weight>> for &FeeRate

Source§

type Output = <FeeRate as Mul<NumOpResult<Weight>>>::Output

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: &NumOpResult<Weight>) -> Self::Output

Performs the * operation. Read more
Source§

impl Mul<&NumOpResult<Weight>> for FeeRate

Source§

type Output = <FeeRate as Mul<NumOpResult<Weight>>>::Output

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: &NumOpResult<Weight>) -> Self::Output

Performs the * operation. Read more
Source§

impl<'a> Mul<&'a Weight> for &FeeRate

Source§

type Output = <FeeRate as Mul<Weight>>::Output

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: &Weight) -> Self::Output

Performs the * operation. Read more
Source§

impl Mul<&Weight> for FeeRate

Source§

type Output = <FeeRate as Mul<Weight>>::Output

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: &Weight) -> Self::Output

Performs the * operation. Read more
Source§

impl Mul<FeeRate> for &NumOpResult<Weight>

Source§

type Output = <NumOpResult<Weight> as Mul<FeeRate>>::Output

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: FeeRate) -> Self::Output

Performs the * operation. Read more
Source§

impl Mul<FeeRate> for &Weight

Source§

type Output = <Weight as Mul<FeeRate>>::Output

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: FeeRate) -> Self::Output

Performs the * operation. Read more
Source§

impl Mul<FeeRate> for NumOpResult<Weight>

Source§

type Output = NumOpResult<Amount>

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: FeeRate) -> Self::Output

Performs the * operation. Read more
Source§

impl Mul<FeeRate> for Weight

Source§

type Output = NumOpResult<Amount>

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: FeeRate) -> Self::Output

Performs the * operation. Read more
Source§

impl Mul<NumOpResult<Weight>> for &FeeRate

Source§

type Output = <FeeRate as Mul<NumOpResult<Weight>>>::Output

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: NumOpResult<Weight>) -> Self::Output

Performs the * operation. Read more
Source§

impl Mul<NumOpResult<Weight>> for FeeRate

Source§

type Output = NumOpResult<Amount>

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: NumOpResult<Weight>) -> Self::Output

Performs the * operation. Read more
Source§

impl Mul<Weight> for &FeeRate

Source§

type Output = <FeeRate as Mul<Weight>>::Output

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: Weight) -> Self::Output

Performs the * operation. Read more
Source§

impl Mul<Weight> for FeeRate

Source§

type Output = NumOpResult<Amount>

The resulting type after applying the * operator.
Source§

fn mul(self, rhs: Weight) -> Self::Output

Performs the * operation. Read more
Source§

impl Ord for FeeRate

Source§

fn cmp(&self, other: &FeeRate) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for FeeRate

Source§

fn eq(&self, other: &FeeRate) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for FeeRate

Source§

fn partial_cmp(&self, other: &FeeRate) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl<'a> Sub<&'a FeeRate> for &FeeRate

Source§

type Output = <FeeRate as Sub>::Output

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: &FeeRate) -> Self::Output

Performs the - operation. Read more
Source§

impl Sub<&FeeRate> for FeeRate

Source§

type Output = <FeeRate as Sub>::Output

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: &FeeRate) -> Self::Output

Performs the - operation. Read more
Source§

impl Sub<FeeRate> for &FeeRate

Source§

type Output = <FeeRate as Sub>::Output

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: FeeRate) -> Self::Output

Performs the - operation. Read more
Source§

impl Sub for FeeRate

Source§

type Output = FeeRate

The resulting type after applying the - operator.
Source§

fn sub(self, rhs: FeeRate) -> Self::Output

Performs the - operation. Read more
Source§

impl SubAssign<&FeeRate> for FeeRate

Source§

fn sub_assign(&mut self, rhs: &FeeRate)

Performs the -= operation. Read more
Source§

impl SubAssign for FeeRate

Source§

fn sub_assign(&mut self, rhs: FeeRate)

Performs the -= operation. Read more
Source§

impl<'a> Sum<&'a FeeRate> for FeeRate

Source§

fn sum<I>(iter: I) -> Self
where I: Iterator<Item = &'a Self>,

Takes an iterator and generates Self from the elements by “summing up” the items.
Source§

impl Sum for FeeRate

Source§

fn sum<I>(iter: I) -> Self
where I: Iterator<Item = Self>,

Takes an iterator and generates Self from the elements by “summing up” the items.
Source§

impl Copy for FeeRate

Source§

impl Eq for FeeRate

Source§

impl StructuralPartialEq for FeeRate

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.