input+sweep: make sure input with no fee rate is not added to cluster
This commit makes sure an input is only added to the cluster when it has successfully estimated its fee rate. Previously, when an error is returned from `feeRateForPreference`, we'd still add this input to the cluster, resulting a **lower** fee rates being used because when averaging the fee rates, we'd think this input has zero fee rate specified. An unit test is patched to make the method `clusterByLockTime` more robust.
This commit is contained in:
3 files changed
+317
-4
No files matched your search
+12
-4
@@ -944,17 +944,25 @@ func (s *UtxoSweeper) clusterByLockTime(inputs pendingInputs) ([]inputCluster,
|
||||
cluster = make(pendingInputs)
|
||||
}
|
||||
|
||||
cluster[op] = input
|
||||
locktimes[lt] = cluster
|
||||
|
||||
// We also get the preferred fee rate for this input.
|
||||
// Get the fee rate based on the fee preference. If an error is
|
||||
// returned, we'll skip sweeping this input for this round of
|
||||
// cluster creation and retry it when we create the clusters
|
||||
// from the pending inputs again.
|
||||
feeRate, err := s.feeRateForPreference(input.params.Fee)
|
||||
if err != nil {
|
||||
log.Warnf("Skipping input %v: %v", op, err)
|
||||
continue
|
||||
}
|
||||
|
||||
log.Debugf("Adding input %v to cluster with locktime=%v, "+
|
||||
"feeRate=%v", op, lt, feeRate)
|
||||
|
||||
// Attach the fee rate to the input.
|
||||
input.lastFeeRate = feeRate
|
||||
|
||||
// Update the cluster about the updated input.
|
||||
cluster[op] = input
|
||||
locktimes[lt] = cluster
|
||||
}
|
||||
|
||||
// We'll then determine the sweep fee rate for each set of inputs by
|
||||
|
||||
Reference in new issue
Block a user