From 485d8f043d5b8769e0b085673a6beaa9c017cede Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Tue, 29 Mar 2022 17:52:25 +0200 Subject: [PATCH] btcwallet: always make sure default scopes exist If new default scopes are added to the underlying btcwallet implementation, then they aren't automatically created for _existing_ wallets, only for new ones. So on startup we need to make sure all scopes are present. --- lnwallet/btcwallet/btcwallet.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/lnwallet/btcwallet/btcwallet.go b/lnwallet/btcwallet/btcwallet.go index 0cb6b5ad3..41bec9410 100644 --- a/lnwallet/btcwallet/btcwallet.go +++ b/lnwallet/btcwallet/btcwallet.go @@ -324,6 +324,34 @@ func (b *BtcWallet) Start() error { } } + // Because we might add new "default" key scopes over time, they are + // created correctly for new wallets. Existing wallets don't + // automatically add them, we need to do that manually now. + for _, scope := range waddrmgr.DefaultKeyScopes { + _, err := b.wallet.Manager.FetchScopedKeyManager(scope) + if waddrmgr.IsError(err, waddrmgr.ErrScopeNotFound) { + // The default scope wasn't found, that probably means + // it was added recently and older wallets don't know it + // yet. Let's add it now. + addrSchema := waddrmgr.ScopeAddrMap[scope] + err := walletdb.Update( + b.db, func(tx walletdb.ReadWriteTx) error { + addrmgrNs := tx.ReadWriteBucket( + waddrmgrNamespaceKey, + ) + + _, err := b.wallet.Manager.NewScopedKeyManager( + addrmgrNs, scope, addrSchema, + ) + return err + }, + ) + if err != nil { + return err + } + } + } + scope, err := b.wallet.Manager.FetchScopedKeyManager(b.chainKeyScope) if err != nil { // If the scope hasn't yet been created (it wouldn't been