multi: support arbitrary client fee preferences to UtxoSweeper
In this commit, we introduce support for arbitrary client fee preferences when accepting input sweep requests. This is possible with the addition of fee rate buckets. Fee rate buckets are buckets that contain inputs with similar fee rates within a specific range, e.g., 1-10 sat/vbyte, 11-20 sat/vbyte, etc. Having these buckets allows us to batch and sweep inputs from different clients with similar fee rates within a single transaction, allowing us to save on chain fees. With this addition, we can now get rid of the UtxoSweeper's default fee preference. As of this commit, any clients using the it to sweep inputs specify the same fee preference to not change their behavior. Each of these can be fine-tuned later on given their use cases.
This commit is contained in:
7 files changed
+470
-180
No files matched your search
+9
-2
@@ -155,6 +155,12 @@ import (
|
||||
|
||||
var byteOrder = binary.BigEndian
|
||||
|
||||
const (
|
||||
// kgtnOutputConfTarget is the default confirmation target we'll use for
|
||||
// sweeps of CSV delayed outputs.
|
||||
kgtnOutputConfTarget = 6
|
||||
)
|
||||
|
||||
var (
|
||||
// ErrContractNotFound is returned when the nursery is unable to
|
||||
// retrieve information about a queried contract.
|
||||
@@ -196,7 +202,7 @@ type NurseryConfig struct {
|
||||
Store NurseryStore
|
||||
|
||||
// Sweep sweeps an input back to the wallet.
|
||||
SweepInput func(input input.Input) (chan sweep.Result, error)
|
||||
SweepInput func(input.Input, sweep.FeePreference) (chan sweep.Result, error)
|
||||
}
|
||||
|
||||
// utxoNursery is a system dedicated to incubating time-locked outputs created
|
||||
@@ -804,12 +810,13 @@ func (u *utxoNursery) sweepMatureOutputs(classHeight uint32,
|
||||
utxnLog.Infof("Sweeping %v CSV-delayed outputs with sweep tx for "+
|
||||
"height %v", len(kgtnOutputs), classHeight)
|
||||
|
||||
feePref := sweep.FeePreference{ConfTarget: kgtnOutputConfTarget}
|
||||
for _, output := range kgtnOutputs {
|
||||
// Create local copy to prevent pointer to loop variable to be
|
||||
// passed in with disastrous consequences.
|
||||
local := output
|
||||
|
||||
resultChan, err := u.cfg.SweepInput(&local)
|
||||
resultChan, err := u.cfg.SweepInput(&local, feePref)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user