funding+htlcswitch: enforce min fee rate of 253 sat/kw on commitments

In this commit, we add and enforce a min fee rate for commitment
transactions created, and also any updates we propose to the remote
party. It's important to note that this is only a temporary patch, as
nodes can dynamically raise their min fee rate whenever their mempool is
saturated.

Fixes #1330.
This commit is contained in:
Olaoluwa Osuntokun 2018-06-05 17:50:45 -07:00
parent f9c220cc7b
commit 8f68d0e605
No known key found for this signature in database
GPG Key ID: 964EA263DD637C21
2 changed files with 31 additions and 4 deletions

@ -67,6 +67,11 @@ const (
// currently accepted on the Litecoin chain within the Lightning
// Protocol.
maxLtcFundingAmount = maxBtcFundingAmount * btcToLtcConversionRate
// minCommitFeePerKw is the smallest fee rate that we should propose
// for a new fee update. We'll use this as a fee floor when proposing
// and accepting updates.
minCommitFeePerKw = 253
)
var (
@ -2520,12 +2525,19 @@ func (f *fundingManager) handleInitFundingMsg(msg *initFundingMsg) {
return
}
// The protocol currently operates on the basis of fee-per-kw, so we'll
// multiply the computed sat/weight by 1000 to arrive at fee-per-kw.
// If the converted fee-per-kw is below the current widely used policy
// floor, then we'll use the floor instead.
commitFeePerKw := feePerVSize.FeePerKWeight()
if commitFeePerKw < minCommitFeePerKw {
fndgLog.Infof("Proposed fee rate of %v sat/kw is below min "+
"of %v sat/kw, using fee floor", int64(commitFeePerKw),
int64(minCommitFeePerKw))
// We set the channel flags to indicate whether we want this channel
// to be announced to the network.
commitFeePerKw = minCommitFeePerKw
}
// We set the channel flags to indicate whether we want this channel to
// be announced to the network.
var channelFlags lnwire.FundingFlag
if !msg.openChanReq.private {
// This channel will be announced.

@ -30,6 +30,11 @@ const (
//
// TODO(roasbeef): must be < default delta
expiryGraceDelta = 2
// minCommitFeePerKw is the smallest fee rate that we should propose
// for a new fee update. We'll use this as a fee floor when proposing
// and accepting updates.
minCommitFeePerKw = 253
)
// ForwardingPolicy describes the set of constraints that a given ChannelLink
@ -476,6 +481,16 @@ func (l *channelLink) sampleNetworkFee() (lnwallet.SatPerKWeight, error) {
// Once we have this fee rate, we'll convert to sat-per-kw.
feePerKw := feePerVSize.FeePerKWeight()
// If the returned feePerKw is less than the current widely used
// policy, then we'll use that instead as a floor.
if feePerKw < minCommitFeePerKw {
log.Debugf("Proposed fee rate of %v sat/kw is below min "+
"of %v sat/kw, using fee floor", int64(feePerKw),
int64(minCommitFeePerKw))
feePerKw = minCommitFeePerKw
}
log.Debugf("ChannelLink(%v): sampled fee rate for 3 block conf: %v "+
"sat/kw", l, int64(feePerKw))