- // Use the new fee estimate if it's higher than the one previously used.
- if feerate_estimate as u64 > self.feerate_previous {
- feerate_estimate
- } else if !force_feerate_bump {
- self.feerate_previous.try_into().unwrap_or(u32::max_value())
- } else {
- // Our fee estimate has decreased, but our transaction remains unconfirmed after
- // using our previous fee estimate. This may point to an unreliable fee estimator,
- // so we choose to bump our previous feerate by 25%, making sure we don't use a
- // lower feerate or overpay by a large margin by limiting it to 5x the new fee
- // estimate.
- let previous_feerate = self.feerate_previous.try_into().unwrap_or(u32::max_value());
- let mut new_feerate = previous_feerate.saturating_add(previous_feerate / 4);
- if new_feerate > feerate_estimate * 5 {
- new_feerate = cmp::max(feerate_estimate * 5, previous_feerate);
- }
- new_feerate
+ let previous_feerate = self.feerate_previous.try_into().unwrap_or(u32::max_value());
+ match feerate_strategy {
+ FeerateStrategy::RetryPrevious => previous_feerate,
+ FeerateStrategy::HighestOfPreviousOrNew => cmp::max(previous_feerate, feerate_estimate),
+ FeerateStrategy::ForceBump => if feerate_estimate > previous_feerate {
+ feerate_estimate
+ } else {
+ // Our fee estimate has decreased, but our transaction remains unconfirmed after
+ // using our previous fee estimate. This may point to an unreliable fee estimator,
+ // so we choose to bump our previous feerate by 25%, making sure we don't use a
+ // lower feerate or overpay by a large margin by limiting it to 5x the new fee
+ // estimate.
+ let previous_feerate = self.feerate_previous.try_into().unwrap_or(u32::max_value());
+ let mut new_feerate = previous_feerate.saturating_add(previous_feerate / 4);
+ if new_feerate > feerate_estimate * 5 {
+ new_feerate = cmp::max(feerate_estimate * 5, previous_feerate);
+ }
+ new_feerate
+ },