@@ -1276,10 +1276,13 @@ fn feerate_bump<F: Deref, L: Logger>(
1276
1276
where
1277
1277
F :: Target : FeeEstimator ,
1278
1278
{
1279
+ let previous_fee = previous_feerate * predicted_weight / 1000 ;
1280
+
1279
1281
// If old feerate inferior to actual one given back by Fee Estimator, use it to compute new fee...
1280
1282
let ( new_fee, new_feerate) = if let Some ( ( new_fee, new_feerate) ) =
1281
1283
compute_fee_from_spent_amounts ( input_amounts, predicted_weight, conf_target, fee_estimator, logger)
1282
1284
{
1285
+ log_trace ! ( logger, "Initiating fee rate bump from {} s/KWU ({} s) to {} s/KWU ({} s)" , previous_feerate, previous_fee, new_feerate, new_fee) ;
1283
1286
match feerate_strategy {
1284
1287
FeerateStrategy :: RetryPrevious => {
1285
1288
let previous_fee = previous_feerate * predicted_weight / 1000 ;
@@ -1297,6 +1300,8 @@ where
1297
1300
// ...else just increase the previous feerate by 25% (because that's a nice number)
1298
1301
let bumped_feerate = previous_feerate + ( previous_feerate / 4 ) ;
1299
1302
let bumped_fee = bumped_feerate * predicted_weight / 1000 ;
1303
+ log_trace ! ( logger, "Attempting forced 25% fee rate bump from {} s/KWU ({} s) to {} s/KWU ({} s)" , previous_feerate, previous_fee, bumped_feerate, bumped_fee) ;
1304
+
1300
1305
if input_amounts <= bumped_fee {
1301
1306
log_warn ! ( logger, "Can't 25% bump new claiming tx, amount {} is too small" , input_amounts) ;
1302
1307
return None ;
@@ -1316,17 +1321,16 @@ where
1316
1321
return Some ( ( new_fee, new_feerate) ) ;
1317
1322
}
1318
1323
1319
- let previous_fee = previous_feerate * predicted_weight / 1000 ;
1320
1324
let min_relay_fee = INCREMENTAL_RELAY_FEE_SAT_PER_1000_WEIGHT * predicted_weight / 1000 ;
1321
1325
// BIP 125 Opt-in Full Replace-by-Fee Signaling
1322
1326
// * 3. The replacement transaction pays an absolute fee of at least the sum paid by the original transactions.
1323
1327
// * 4. The replacement transaction must also pay for its own bandwidth at or above the rate set by the node's minimum relay fee setting.
1324
- let new_fee = if new_fee < previous_fee + min_relay_fee {
1325
- new_fee + previous_fee + min_relay_fee - new_fee
1326
- } else {
1327
- new_fee
1328
- } ;
1329
- Some ( ( new_fee, new_fee * 1000 / predicted_weight ) )
1328
+ let naive_new_fee = new_fee;
1329
+ let naive_new_feerate = new_feerate ;
1330
+ let new_fee = cmp :: max ( new_fee , previous_fee + min_relay_fee ) ;
1331
+ let new_feerate = new_fee * 1000 / predicted_weight ;
1332
+ log_trace ! ( logger , "Fee rate bumped by {}s from {} s/KWU ({} s) to {} s/KWU ({} s) (naive: {} s/KWU ({} s))" , new_fee - previous_fee , previous_feerate , previous_fee , new_feerate , new_fee , naive_new_feerate , naive_new_fee ) ;
1333
+ Some ( ( new_fee, new_feerate ) )
1330
1334
}
1331
1335
1332
1336
#[ cfg( test) ]
0 commit comments