From 20b3114100afb836a5d64d048ab66c3b8135005f Mon Sep 17 00:00:00 2001 From: Valentine Wallace Date: Fri, 7 Dec 2018 18:39:34 -0800 Subject: [PATCH] htlcswitch+lnwallet+peer: default max htlc in fwding policy of new chans In this commit, we set a default max HTLC in the forwarding policies of newly open channels. The ForwardingPolicy's MaxHTLC field (added in this commit) will later be used to decide whether an HTLC satisfies our policy before forwarding it. To ensure the ForwardingPolicy's MaxHTLC default matches the max HTLC advertised in the ChannelUpdate sent out for this channel, we also add a MaxPendingAmount() function to the lnwallet.Channel. --- htlcswitch/link.go | 3 +++ lnwallet/channel.go | 6 ++++++ peer.go | 12 +++++++----- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/htlcswitch/link.go b/htlcswitch/link.go index c245ea65..c88026f8 100644 --- a/htlcswitch/link.go +++ b/htlcswitch/link.go @@ -71,6 +71,9 @@ type ForwardingPolicy struct { // lifetime of the channel. MinHTLC lnwire.MilliSatoshi + // MaxHTLC is the largest HTLC that is to be forwarded. + MaxHTLC lnwire.MilliSatoshi + // BaseFee is the base fee, expressed in milli-satoshi that must be // paid for each incoming HTLC. This field, combined with FeeRate is // used to compute the required fee for a given HTLC. diff --git a/lnwallet/channel.go b/lnwallet/channel.go index 8a9bcddb..b3b79682 100644 --- a/lnwallet/channel.go +++ b/lnwallet/channel.go @@ -6336,3 +6336,9 @@ func (lc *LightningChannel) RemoteCommitHeight() uint64 { func (lc *LightningChannel) FwdMinHtlc() lnwire.MilliSatoshi { return lc.localChanCfg.MinHTLC } + +// MaxPendingAmount returns the maximum HTLC value that can be pending at +// any time over this channel. +func (lc *LightningChannel) MaxPendingAmount() lnwire.MilliSatoshi { + return lc.localChanCfg.MaxPendingAmount +} diff --git a/peer.go b/peer.go index 41a55892..d8793ca4 100644 --- a/peer.go +++ b/peer.go @@ -1670,15 +1670,17 @@ out: continue } - // We'll query the localChanCfg of the new channel to - // determine the minimum HTLC value that can be - // forwarded. For fees we'll use the default values, as - // they currently are always set to the default values - // at initial channel creation. + // We'll query the localChanCfg of the new channel to determine the + // minimum HTLC value that can be forwarded. For the maximum HTLC + // value that can be forwarded and fees we'll use the default + // values, as they currently are always set to the default values + // at initial channel creation. Note that the maximum HTLC value + // defaults to the cap on the total value of outstanding HTLCs. fwdMinHtlc := lnChan.FwdMinHtlc() defaultPolicy := p.server.cc.routingPolicy forwardingPolicy := &htlcswitch.ForwardingPolicy{ MinHTLC: fwdMinHtlc, + MaxHTLC: lnChan.MaxPendingAmount(), BaseFee: defaultPolicy.BaseFee, FeeRate: defaultPolicy.FeeRate, TimeLockDelta: defaultPolicy.TimeLockDelta,