Files
lnd/lncfg/htlcswitch.go
2025-07-04 04:20:00 +08:00

52 lines
1.9 KiB
Go

package lncfg
import (
"fmt"
"time"
)
var (
// MaxMailboxDeliveryTimeout specifies the max allowed timeout value.
// This value is derived from the itest `async_bidirectional_payments`,
// where both side send 483 payments at the same time to stress test
// lnd.
MaxMailboxDeliveryTimeout = 2 * time.Minute
// minQuiescenceTimeout specifies the minimal timeout value that can be
// used for `QuiescenceTimeout`.
minQuiescenceTimeout = 30 * time.Second
// DefaultQuiescenceTimeout specifies the default value to be used for
// `QuiescenceTimeout`.
DefaultQuiescenceTimeout = 60 * time.Second
)
//nolint:ll
type Htlcswitch struct {
MailboxDeliveryTimeout time.Duration `long:"mailboxdeliverytimeout" description:"The timeout value when delivering HTLCs to a channel link. Setting this value too small will result in local payment failures if large number of payments are sent over a short period."`
QuiescenceTimeout time.Duration `long:"quiescencetimeout" description:"The max duration that the channel can be quiesced. Any dependent protocols (dynamic commitments, splicing, etc.) must finish their operations under this timeout value, otherwise the node will disconnect."`
}
// Validate checks the values configured for htlcswitch.
func (h *Htlcswitch) Validate() error {
if h.MailboxDeliveryTimeout <= 0 {
return fmt.Errorf("mailboxdeliverytimeout must be positive")
}
if h.MailboxDeliveryTimeout > MaxMailboxDeliveryTimeout {
return fmt.Errorf("mailboxdeliverytimeout: %v exceeds "+
"maximum: %v", h.MailboxDeliveryTimeout,
MaxMailboxDeliveryTimeout)
}
// Skip the validation for integration tests so we can use a smaller
// timeout value to check the timeout behavior.
if !IsDevBuild() && h.QuiescenceTimeout < minQuiescenceTimeout {
return fmt.Errorf("quiescencetimeout: %v below minimal: %v",
h.QuiescenceTimeout, minQuiescenceTimeout)
}
return nil
}