htlcswitch+lnd: make max cltv expiry configurable
This commit is contained in:
5 files changed
+28
-14
No files matched your search
+14
-9
@@ -30,16 +30,16 @@ func init() {
|
||||
}
|
||||
|
||||
const (
|
||||
// maxCltvExpiry is the maximum outgoing time lock that the node accepts
|
||||
// for forwarded payments. The value is relative to the current block
|
||||
// height. The reason to have a maximum is to prevent funds getting
|
||||
// locked up unreasonably long. Otherwise, an attacker willing to lock
|
||||
// its own funds too, could force the funds of this node to be locked up
|
||||
// for an indefinite (max int32) number of blocks.
|
||||
// DefaultMaxOutgoingCltvExpiry is the maximum outgoing time lock that
|
||||
// the node accepts for forwarded payments. The value is relative to the
|
||||
// current block height. The reason to have a maximum is to prevent
|
||||
// funds getting locked up unreasonably long. Otherwise, an attacker
|
||||
// willing to lock its own funds too, could force the funds of this node
|
||||
// to be locked up for an indefinite (max int32) number of blocks.
|
||||
//
|
||||
// The value 5000 is based on the maximum number of hops (20), the
|
||||
// default cltv delta (144) and some extra margin.
|
||||
maxCltvExpiry = 5000
|
||||
DefaultMaxOutgoingCltvExpiry = 5000
|
||||
|
||||
// DefaultMinLinkFeeUpdateTimeout represents the minimum interval in
|
||||
// which a link should propose to update its commitment fee rate.
|
||||
@@ -249,6 +249,11 @@ type ChannelLinkConfig struct {
|
||||
// encrypting, and uploading of justice transactions to the daemon's
|
||||
// configured set of watchtowers.
|
||||
TowerClient TowerClient
|
||||
|
||||
// MaxCltvExpiry is the maximum outgoing timelock that the link should
|
||||
// accept for a forwarded HTLC. The value is relative to the current
|
||||
// block height.
|
||||
MaxOutgoingCltvExpiry uint32
|
||||
}
|
||||
|
||||
// channelLink is the service which drives a channel's commitment update
|
||||
@@ -2337,10 +2342,10 @@ func (l *channelLink) htlcSatifiesPolicyOutgoing(policy ForwardingPolicy,
|
||||
}
|
||||
|
||||
// Check absolute max delta.
|
||||
if timeout > maxCltvExpiry+heightNow {
|
||||
if timeout > l.cfg.MaxOutgoingCltvExpiry+heightNow {
|
||||
l.errorf("outgoing htlc(%x) has a time lock too far in the "+
|
||||
"future: got %v, but maximum is %v", payHash[:],
|
||||
timeout-heightNow, maxCltvExpiry)
|
||||
timeout-heightNow, l.cfg.MaxOutgoingCltvExpiry)
|
||||
|
||||
return &lnwire.FailExpiryTooFar{}
|
||||
}
|
||||
|
||||
@@ -1689,9 +1689,10 @@ func newSingleLinkTestHarness(chanAmt, chanReserve btcutil.Amount) (
|
||||
FwdPkgGCTicker: ticker.NewForce(15 * time.Second),
|
||||
// Make the BatchSize and Min/MaxFeeUpdateTimeout large enough
|
||||
// to not trigger commit updates automatically during tests.
|
||||
BatchSize: 10000,
|
||||
MinFeeUpdateTimeout: 30 * time.Minute,
|
||||
MaxFeeUpdateTimeout: 40 * time.Minute,
|
||||
BatchSize: 10000,
|
||||
MinFeeUpdateTimeout: 30 * time.Minute,
|
||||
MaxFeeUpdateTimeout: 40 * time.Minute,
|
||||
MaxOutgoingCltvExpiry: DefaultMaxOutgoingCltvExpiry,
|
||||
}
|
||||
|
||||
const startingHeight = 100
|
||||
@@ -4238,8 +4239,9 @@ func (h *persistentLinkHarness) restartLink(
|
||||
MinFeeUpdateTimeout: 30 * time.Minute,
|
||||
MaxFeeUpdateTimeout: 40 * time.Minute,
|
||||
// Set any hodl flags requested for the new link.
|
||||
HodlMask: hodl.MaskFromFlags(hodlFlags...),
|
||||
DebugHTLC: len(hodlFlags) > 0,
|
||||
HodlMask: hodl.MaskFromFlags(hodlFlags...),
|
||||
DebugHTLC: len(hodlFlags) > 0,
|
||||
MaxOutgoingCltvExpiry: DefaultMaxOutgoingCltvExpiry,
|
||||
}
|
||||
|
||||
const startingHeight = 100
|
||||
@@ -5559,6 +5561,7 @@ func TestHtlcSatisfyPolicy(t *testing.T) {
|
||||
BaseFee: 10,
|
||||
},
|
||||
FetchLastChannelUpdate: fetchLastChannelUpdate,
|
||||
MaxOutgoingCltvExpiry: DefaultMaxOutgoingCltvExpiry,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -1115,6 +1115,7 @@ func (h *hopNetwork) createChannelLink(server, peer *mockServer,
|
||||
MaxFeeUpdateTimeout: maxFeeUpdateTimeout,
|
||||
OnChannelFailure: func(lnwire.ChannelID, lnwire.ShortChannelID, LinkFailureError) {},
|
||||
OutgoingCltvRejectDelta: 3,
|
||||
MaxOutgoingCltvExpiry: DefaultMaxOutgoingCltvExpiry,
|
||||
},
|
||||
channel,
|
||||
)
|
||||
|
||||
Reference in new issue
Block a user