htlcswitch: within link, with each new block, check to see if commit fee should change
In this commit we add a new case to the main select statement within a channel link. This select statement will serve as a Sipping Bird which will check the network fee rate (as returned by the fee estimator) and compare that to the fee on the commitment transaction. Using the shouldAdjustCommitFee function, we determine if we should update the commitment fee. If so, then we’ll send an UpdateFee message and also trigger a new commitment update. We also add a new unit test: TestChannelLinkUpdateCommitFee to ensure that we update the fee accordingly if the fee increases or decreases by a large portion.
This commit is contained in:
4 files changed
+316
-28
No files matched your search
@@ -22,8 +22,44 @@ import (
|
||||
"github.com/roasbeef/btcd/chaincfg/chainhash"
|
||||
"github.com/roasbeef/btcd/txscript"
|
||||
"github.com/roasbeef/btcd/wire"
|
||||
"github.com/roasbeef/btcutil"
|
||||
)
|
||||
|
||||
type mockFeeEstimator struct {
|
||||
byteFeeIn chan btcutil.Amount
|
||||
weightFeeIn chan btcutil.Amount
|
||||
|
||||
quit chan struct{}
|
||||
}
|
||||
|
||||
func (m *mockFeeEstimator) EstimateFeePerByte(numBlocks uint32) (btcutil.Amount, error) {
|
||||
select {
|
||||
case feeRate := <-m.byteFeeIn:
|
||||
return feeRate, nil
|
||||
case <-m.quit:
|
||||
return 0, fmt.Errorf("exiting")
|
||||
}
|
||||
}
|
||||
|
||||
func (m *mockFeeEstimator) EstimateFeePerWeight(numBlocks uint32) (btcutil.Amount, error) {
|
||||
select {
|
||||
case feeRate := <-m.weightFeeIn:
|
||||
return feeRate, nil
|
||||
case <-m.quit:
|
||||
return 0, fmt.Errorf("exiting")
|
||||
}
|
||||
}
|
||||
|
||||
func (m *mockFeeEstimator) Start() error {
|
||||
return nil
|
||||
}
|
||||
func (m *mockFeeEstimator) Stop() error {
|
||||
close(m.quit)
|
||||
return nil
|
||||
}
|
||||
|
||||
var _ lnwallet.FeeEstimator = (*mockFeeEstimator)(nil)
|
||||
|
||||
type mockServer struct {
|
||||
started int32
|
||||
shutdown int32
|
||||
@@ -304,6 +340,8 @@ func (s *mockServer) readHandler(message lnwire.Message) error {
|
||||
return nil
|
||||
case *lnwire.ChannelReestablish:
|
||||
targetChan = msg.ChanID
|
||||
case *lnwire.UpdateFee:
|
||||
targetChan = msg.ChanID
|
||||
default:
|
||||
return fmt.Errorf("unknown message type: %T", msg)
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user