Skip to content

Commit b05286d

Browse files
committed
Enforce dust threshold when fee-bumping
1 parent a12bdc1 commit b05286d

File tree

1 file changed

+23
-4
lines changed

1 file changed

+23
-4
lines changed

lightning/src/chain/package.rs

+23-4
Original file line numberDiff line numberDiff line change
@@ -1117,8 +1117,8 @@ impl PackageTemplate {
11171117
// If old feerate is 0, first iteration of this claim, use normal fee calculation
11181118
if self.feerate_previous != 0 {
11191119
if let Some((new_fee, feerate)) = feerate_bump(
1120-
predicted_weight, input_amounts, self.feerate_previous, feerate_strategy,
1121-
conf_target, fee_estimator, logger,
1120+
predicted_weight, input_amounts, dust_limit_sats, self.feerate_previous,
1121+
feerate_strategy, conf_target, fee_estimator, logger,
11221122
) {
11231123
return Some((cmp::max(input_amounts as i64 - new_fee as i64, dust_limit_sats as i64) as u64, feerate));
11241124
}
@@ -1270,8 +1270,9 @@ fn compute_fee_from_spent_amounts<F: Deref, L: Logger>(
12701270
/// respect BIP125 rules 3) and 4) and if required adjust the new fee to meet the RBF policy
12711271
/// requirement.
12721272
fn feerate_bump<F: Deref, L: Logger>(
1273-
predicted_weight: u64, input_amounts: u64, previous_feerate: u64, feerate_strategy: &FeerateStrategy,
1274-
conf_target: ConfirmationTarget, fee_estimator: &LowerBoundedFeeEstimator<F>, logger: &L,
1273+
predicted_weight: u64, input_amounts: u64, dust_limit_sats: u64, previous_feerate: u64,
1274+
feerate_strategy: &FeerateStrategy, conf_target: ConfirmationTarget,
1275+
fee_estimator: &LowerBoundedFeeEstimator<F>, logger: &L,
12751276
) -> Option<(u64, u64)>
12761277
where
12771278
F::Target: FeeEstimator,
@@ -1306,6 +1307,13 @@ where
13061307
log_warn!(logger, "Can't 25% bump new claiming tx, amount {} is too small", input_amounts);
13071308
return None;
13081309
}
1310+
1311+
let remaining_output_amount = input_amounts - bumped_fee;
1312+
if remaining_output_amount < dust_limit_sats {
1313+
log_warn!(logger, "Can't new-estimation bump new claiming tx, output amount {} would end up below dust threshold {}", remaining_output_amount, dust_limit_sats);
1314+
return None;
1315+
}
1316+
13091317
(bumped_fee, bumped_feerate)
13101318
},
13111319
}
@@ -1328,6 +1336,17 @@ where
13281336
let naive_new_fee = new_fee;
13291337
let naive_new_feerate = new_feerate;
13301338
let new_fee = cmp::max(new_fee, previous_fee + min_relay_fee);
1339+
1340+
if new_fee > naive_new_fee {
1341+
log_trace!(logger, "Naive fee bump of {}s does not meet min relay fee requirements of {}s", naive_new_fee - previous_fee, min_relay_fee);
1342+
}
1343+
1344+
let remaining_output_amount = input_amounts - new_fee;
1345+
if remaining_output_amount < dust_limit_sats {
1346+
log_warn!(logger, "Can't new-estimation bump new claiming tx, output amount {} would end up below dust threshold {}", remaining_output_amount, dust_limit_sats);
1347+
return None;
1348+
}
1349+
13311350
let new_feerate = new_fee * 1000 / predicted_weight;
13321351
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);
13331352
Some((new_fee, new_feerate))

0 commit comments

Comments
 (0)