diff --git a/docs/release-notes/release-notes-0.15.0.md b/docs/release-notes/release-notes-0.15.0.md index 24ecd3f53..14e74678e 100644 --- a/docs/release-notes/release-notes-0.15.0.md +++ b/docs/release-notes/release-notes-0.15.0.md @@ -68,6 +68,10 @@ then watch it on chain. Taproot script spends are also supported through the * [Fixed a bug that would cause lnd to be unable to parse certain PSBT blobs](https://github.com/lightningnetwork/lnd/pull/6383). +* [Fixed a bug in the `btcwallet` that caused an error to be shown for + `lncli walletbalance` in existing wallets after upgrading to + Taproot](https://github.com/lightningnetwork/lnd/pull/6379). + ## Misc * [An example systemd service file](https://github.com/lightningnetwork/lnd/pull/6033) 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