From 784dc8d530713d9209ba92f3ec7477ed0bfc27f2 Mon Sep 17 00:00:00 2001 From: Elle Mouton Date: Wed, 19 Apr 2023 10:38:09 +0200 Subject: [PATCH] funding: use default fwding policy if persisted values not found In this commit, a bug is fixed in the funding manager that could result in the funding process erroring out if the persisted initial forwarding policy is not found. This could occur if a node restarts after opening a channel that is not yet fully confirmed and also upgrades their node from a pre-0.16 version to 0.16 since the values are only expected to be persisted after 0.16. --- docs/release-notes/release-notes-0.16.1.md | 5 ++++- funding/manager.go | 7 ++++--- funding/manager_test.go | 4 ++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/docs/release-notes/release-notes-0.16.1.md b/docs/release-notes/release-notes-0.16.1.md index 4b62a1c8b..e9cc58c7e 100644 --- a/docs/release-notes/release-notes-0.16.1.md +++ b/docs/release-notes/release-notes-0.16.1.md @@ -84,11 +84,14 @@ available](https://github.com/lightningnetwork/lnd/pull/7529). * [Fix log output](https://github.com/lightningnetwork/lnd/pull/7604). - * [Channels opened with custom fee policies are now able to forward payments correctly without needing to restart first](https://github.com/lightningnetwork/lnd/pull/7597). +* [Fix a bug](https://github.com/lightningnetwork/lnd/pull/7613) where the + funding manager would error out if no persisted initial forwarding policy is + found for a channel. + # Contributors (Alphabetical Order) * ardevd diff --git a/funding/manager.go b/funding/manager.go index ad66ba1c1..a6b4a6106 100644 --- a/funding/manager.go +++ b/funding/manager.go @@ -3729,10 +3729,11 @@ func (f *Manager) newChanAnnouncement(localPubKey, } // The caller of newChanAnnouncement is expected to provide the initial - // forwarding policy to be announced. We abort the channel announcement - // if they are not provided. + // forwarding policy to be announced. If no persisted initial policy + // values are found, then we will use the default policy values in the + // channel announcement. storedFwdingPolicy, err := f.getInitialFwdingPolicy(chanID) - if err != nil { + if err != nil && !errors.Is(err, channeldb.ErrChannelNotFound) { return nil, errors.Errorf("unable to generate channel "+ "update announcement: %v", err) } diff --git a/funding/manager_test.go b/funding/manager_test.go index ec9a05c0f..305920e0a 100644 --- a/funding/manager_test.go +++ b/funding/manager_test.go @@ -3154,7 +3154,7 @@ func TestFundingManagerCustomChannelParameters(t *testing.T) { t.Fatal("OpenStatusUpdate was not OpenStatusUpdate_ChanPending") } - // After the funding is sigend and before the channel announcement + // After the funding is signed and before the channel announcement // we expect Alice and Bob to store their respective fees in the // database. forwardingPolicy, err := alice.fundingMgr.getInitialFwdingPolicy( @@ -3169,7 +3169,7 @@ func TestFundingManagerCustomChannelParameters(t *testing.T) { require.NoError(t, err) require.NoError(t, assertFees(forwardingPolicy, 100, 1000)) - // Wait for Alice to published the funding tx to the network. + // Wait for Alice to publish the funding tx to the network. var fundingTx *wire.MsgTx select { case fundingTx = <-alice.publTxChan: