Skip to content

Commit

Permalink
Merge 24ca962 into add905d
Browse files Browse the repository at this point in the history
  • Loading branch information
wpaulino committed Jul 27, 2019
2 parents add905d + 24ca962 commit 79fdcee
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 16 deletions.
4 changes: 4 additions & 0 deletions config.go
Expand Up @@ -26,6 +26,7 @@ import (
"github.com/lightningnetwork/lnd/chanbackup"
"github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/discovery"
"github.com/lightningnetwork/lnd/htlcswitch"
"github.com/lightningnetwork/lnd/htlcswitch/hodl"
"github.com/lightningnetwork/lnd/lncfg"
"github.com/lightningnetwork/lnd/lnrpc/routerrpc"
Expand Down Expand Up @@ -312,6 +313,8 @@ type config struct {

StaggerInitialReconnect bool `long:"stagger-initial-reconnect" description:"If true, will apply a randomized staggering between 0s and 30s when reconnecting to persistent peers on startup. The first 10 reconnections will be attempted instantly, regardless of the flag's value"`

MaxOutgoingCltvExpiry uint32 `long:"max-cltv-expiry" description:"The maximum number of blocks funds could be locked up for when forwarding payments."`

net tor.Net

Routing *routing.Conf `group:"routing" namespace:"routing"`
Expand Down Expand Up @@ -425,6 +428,7 @@ func loadConfig() (*config, error) {
Watchtower: &lncfg.Watchtower{
TowerDir: defaultTowerDir,
},
MaxOutgoingCltvExpiry: htlcswitch.DefaultMaxOutgoingCltvExpiry,
}

// Pre-parse the command line options to pick up an alternative config
Expand Down
29 changes: 18 additions & 11 deletions htlcswitch/link.go
Expand Up @@ -30,16 +30,18 @@ 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
// The value 1008 corresponds to on average one week worth of blocks and
// is based on the maximum number of hops (20), the default cltv delta
// (40) and some extra margin to account for the other lightning
// implementations.
DefaultMaxOutgoingCltvExpiry = 1008

// DefaultMinLinkFeeUpdateTimeout represents the minimum interval in
// which a link should propose to update its commitment fee rate.
Expand Down Expand Up @@ -249,6 +251,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
Expand Down Expand Up @@ -2337,10 +2344,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{}
}
Expand Down
13 changes: 8 additions & 5 deletions htlcswitch/link_test.go
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -5559,6 +5561,7 @@ func TestHtlcSatisfyPolicy(t *testing.T) {
BaseFee: 10,
},
FetchLastChannelUpdate: fetchLastChannelUpdate,
MaxOutgoingCltvExpiry: DefaultMaxOutgoingCltvExpiry,
},
}

Expand Down
1 change: 1 addition & 0 deletions htlcswitch/test_utils.go
Expand Up @@ -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,
)
Expand Down
1 change: 1 addition & 0 deletions peer.go
Expand Up @@ -585,6 +585,7 @@ func (p *peer) addLink(chanPoint *wire.OutPoint,
MaxFeeUpdateTimeout: htlcswitch.DefaultMaxLinkFeeUpdateTimeout,
OutgoingCltvRejectDelta: p.outgoingCltvRejectDelta,
TowerClient: p.server.towerClient,
MaxOutgoingCltvExpiry: cfg.MaxOutgoingCltvExpiry,
}

link := htlcswitch.NewChannelLink(linkCfg, lnChan)
Expand Down

0 comments on commit 79fdcee

Please sign in to comment.