From 9fd9234d869018dbdfd311e76fec3587b3f98c21 Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Fri, 8 Jul 2022 13:29:19 +0200 Subject: [PATCH] lnwallet: don't create BIP044 key scope by default With a change in #6379 we made sure that all default scopes are added to the the wallet. Unfortunately this included the BIP044 key scope that our wallet doesn't really use. This breaks the remote signing setup because we don't export the account of the BIP044 scope and therefore run into an issue on the watch-only side when attempting to create the wallet. --- lnwallet/btcwallet/btcwallet.go | 75 ++++++++++++--------------------- 1 file changed, 27 insertions(+), 48 deletions(-) diff --git a/lnwallet/btcwallet/btcwallet.go b/lnwallet/btcwallet/btcwallet.go index c92823cb8..5fd6614a7 100644 --- a/lnwallet/btcwallet/btcwallet.go +++ b/lnwallet/btcwallet/btcwallet.go @@ -70,6 +70,14 @@ var ( InternalAddrType: waddrmgr.WitnessPubKey, } + // LndDefaultKeyScopes is the list of default key scopes that lnd adds + // to its wallet. + LndDefaultKeyScopes = []waddrmgr.KeyScope{ + waddrmgr.KeyScopeBIP0049Plus, + waddrmgr.KeyScopeBIP0084, + waddrmgr.KeyScopeBIP0086, + } + // errNoImportedAddrGen is an error returned when a new address is // requested for the default imported account within the wallet. errNoImportedAddrGen = errors.New("addresses cannot be generated for " + @@ -333,7 +341,7 @@ 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 { + for _, scope := range LndDefaultKeyScopes { _, err := b.wallet.Manager.FetchScopedKeyManager(scope) if waddrmgr.IsError(err, waddrmgr.ErrScopeNotFound) { // The default scope wasn't found, that probably means @@ -615,29 +623,16 @@ func (b *BtcWallet) ListAccounts(name string, if name == lnwallet.DefaultAccountName || name == waddrmgr.ImportedAddrAccountName { - a1, err := b.wallet.AccountPropertiesByName( - waddrmgr.KeyScopeBIP0049Plus, name, - ) - if err != nil { - return nil, err + for _, defaultScope := range LndDefaultKeyScopes { + a, err := b.wallet.AccountPropertiesByName( + defaultScope, name, + ) + if err != nil { + return nil, err + } + res = append(res, a) } - res = append(res, a1) - a2, err := b.wallet.AccountPropertiesByName( - waddrmgr.KeyScopeBIP0084, name, - ) - if err != nil { - return nil, err - } - res = append(res, a2) - - a3, err := b.wallet.AccountPropertiesByName( - waddrmgr.KeyScopeBIP0086, name, - ) - if err != nil { - return nil, err - } - res = append(res, a3) break } @@ -668,34 +663,18 @@ func (b *BtcWallet) ListAccounts(name string, // Neither of the filters were provided, so return all accounts for our // supported key scopes. case name == "" && keyScope == nil: - accounts, err := b.wallet.Accounts(waddrmgr.KeyScopeBIP0049Plus) - if err != nil { - return nil, err - } - for _, account := range accounts.Accounts { - account := account - res = append(res, &account.AccountProperties) + for _, defaultScope := range LndDefaultKeyScopes { + accounts, err := b.wallet.Accounts(defaultScope) + if err != nil { + return nil, err + } + for _, account := range accounts.Accounts { + account := account + res = append(res, &account.AccountProperties) + } } - accounts, err = b.wallet.Accounts(waddrmgr.KeyScopeBIP0084) - if err != nil { - return nil, err - } - for _, account := range accounts.Accounts { - account := account - res = append(res, &account.AccountProperties) - } - - accounts, err = b.wallet.Accounts(waddrmgr.KeyScopeBIP0086) - if err != nil { - return nil, err - } - for _, account := range accounts.Accounts { - account := account - res = append(res, &account.AccountProperties) - } - - accounts, err = b.wallet.Accounts(waddrmgr.KeyScope{ + accounts, err := b.wallet.Accounts(waddrmgr.KeyScope{ Purpose: keychain.BIP0043Purpose, Coin: b.cfg.CoinType, })