diff --git a/channeldb/channel.go b/channeldb/channel.go index 6d58f8ab5..764db9a72 100644 --- a/channeldb/channel.go +++ b/channeldb/channel.go @@ -538,7 +538,7 @@ func (c *OpenChannel) MarkAsOpen(openLoc lnwire.ShortChannelID) error { c.Lock() defer c.Unlock() - return c.Db.Update(func(tx *bolt.Tx) error { + if err := c.Db.Update(func(tx *bolt.Tx) error { chanBucket, err := updateChanBucket(tx, c.IdentityPub, &c.FundingOutpoint, c.ChainHash) if err != nil { @@ -554,7 +554,14 @@ func (c *OpenChannel) MarkAsOpen(openLoc lnwire.ShortChannelID) error { channel.ShortChanID = openLoc return putOpenChannel(chanBucket, channel) - }) + }); err != nil { + return err + } + + c.IsPending = false + c.ShortChanID = openLoc + + return nil } // MarkBorked marks the event when the channel as reached an irreconcilable diff --git a/channeldb/channel_test.go b/channeldb/channel_test.go index 4cf14c78f..e405f60d8 100644 --- a/channeldb/channel_test.go +++ b/channeldb/channel_test.go @@ -684,6 +684,16 @@ func TestFetchPendingChannels(t *testing.T) { t.Fatalf("unable to mark channel as open: %v", err) } + if pendingChannels[0].IsPending { + t.Fatalf("channel marked open should no longer be pending") + } + + if pendingChannels[0].ShortChanID != chanOpenLoc { + t.Fatalf("channel opening height not updated: expected %v, "+ + "got %v", spew.Sdump(pendingChannels[0].ShortChanID), + chanOpenLoc) + } + // Next, we'll re-fetch the channel to ensure that the open height was // properly set. openChans, err := cdb.FetchAllChannels()