Skip to content

Commit

Permalink
multi: make max fee rate configurable
Browse files Browse the repository at this point in the history
  • Loading branch information
yyforyongyu authored and backend-engineer1 committed Oct 6, 2023
1 parent 852bce2 commit f356ff3
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 2 deletions.
1 change: 1 addition & 0 deletions config.go
Original file line number Diff line number Diff line change
Expand Up @@ -684,6 +684,7 @@ func DefaultConfig() Config {
},
Sweeper: &lncfg.Sweeper{
BatchWindowDuration: sweep.DefaultBatchWindowDuration,
MaxFeeRate: sweep.DefaultMaxFeeRate,
},
Htlcswitch: &lncfg.Htlcswitch{
MailboxDeliveryTimeout: htlcswitch.DefaultMailboxDeliveryTimeout,
Expand Down
25 changes: 24 additions & 1 deletion lncfg/sweeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,24 @@ package lncfg
import (
"fmt"
"time"

"github.com/lightningnetwork/lnd/lnwallet/chainfee"
)

const (
// MaxFeeRateFloor is the smallest config value allowed for the max fee
// rate in sat/vb.
MaxFeeRateFloor chainfee.SatPerVByte = 100

// MaxAllowedFeeRate is the largest fee rate in sat/vb that we allow
// when configuring the MaxFeeRate.
MaxAllowedFeeRate = 10_000
)

//nolint:lll
type Sweeper struct {
BatchWindowDuration time.Duration `long:"batchwindowduration" description:"Duration of the sweep batch window. The sweep is held back during the batch window to allow more inputs to be added and thereby lower the fee per input."`
BatchWindowDuration time.Duration `long:"batchwindowduration" description:"Duration of the sweep batch window. The sweep is held back during the batch window to allow more inputs to be added and thereby lower the fee per input."`
MaxFeeRate chainfee.SatPerVByte `long:"maxfeerate" description:"Maximum fee rate in sat/vb that the sweeper is allowed to use when sweeping funds. Setting this value too low can result in transactions not being confirmed in time, causing HTLCs to expire hence potentially losing funds."`
}

// Validate checks the values configured for the sweeper.
Expand All @@ -16,5 +29,15 @@ func (s *Sweeper) Validate() error {
return fmt.Errorf("batchwindowduration must be positive")
}

// We require the max fee rate to be at least 100 sat/vbyte.
if s.MaxFeeRate < MaxFeeRateFloor {
return fmt.Errorf("maxfeerate must be >= 100 sat/vb")
}

// We require the max fee rate to be no greater than 10_000 sat/vbyte.
if s.MaxFeeRate > MaxAllowedFeeRate {
return fmt.Errorf("maxfeerate must be <= 10000 sat/vb")
}

return nil
}
5 changes: 5 additions & 0 deletions sample-lnd.conf
Original file line number Diff line number Diff line change
Expand Up @@ -1590,6 +1590,11 @@
; window to allow more inputs to be added and thereby lower the fee per input.
; sweeper.batchwindowduration=30s

; The max fee rate in sat/vb which can be used when sweeping funds. Setting
; this value too low can result in transactions not being confirmed in time,
; causing HTLCs to expire hence potentially losing funds.
; sweeper.maxfeerate=1000


[htlcswitch]

Expand Down
2 changes: 1 addition & 1 deletion server.go
Original file line number Diff line number Diff line change
Expand Up @@ -1071,7 +1071,7 @@ func newServer(cfg *Config, listenAddrs []net.Addr,
MaxInputsPerTx: sweep.DefaultMaxInputsPerTx,
MaxSweepAttempts: sweep.DefaultMaxSweepAttempts,
NextAttemptDeltaFunc: sweep.DefaultNextAttemptDeltaFunc,
MaxFeeRate: sweep.DefaultMaxFeeRate,
MaxFeeRate: cfg.Sweeper.MaxFeeRate,
FeeRateBucketSize: sweep.DefaultFeeRateBucketSize,
})

Expand Down

0 comments on commit f356ff3

Please sign in to comment.