From 43e19da86842b2d997f02f228a9bc02381968443 Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Mon, 30 Mar 2020 15:31:44 -0700 Subject: [PATCH] Revert "waddrmgr+wallet: only watch addresses within default key scopes" The commit being reverted resulted in the discovery of a bug in which change addresses could at times be created outside of the default key scopes, causing us to not properly determine their spends. --- waddrmgr/manager.go | 23 ----------------------- wallet/wallet.go | 20 ++++++++------------ 2 files changed, 8 insertions(+), 35 deletions(-) diff --git a/waddrmgr/manager.go b/waddrmgr/manager.go index f2895ca..b94c6ee 100644 --- a/waddrmgr/manager.go +++ b/waddrmgr/manager.go @@ -756,29 +756,6 @@ func (m *Manager) ForEachAccountAddress(ns walletdb.ReadBucket, account uint32, return nil } -// ForEachDefaultScopeActiveAddress calls the given function with each active -// address stored in the manager within the default scopes, breaking early on -// error. -func (m *Manager) ForEachDefaultScopeActiveAddress(ns walletdb.ReadBucket, - fn func(addr btcutil.Address) error) error { - - m.mtx.RLock() - defer m.mtx.RUnlock() - - for _, keyScope := range DefaultKeyScopes { - scopedMgr, ok := m.scopedManagers[keyScope] - if !ok { - return fmt.Errorf("manager for default key scope with "+ - "purpose %v not found", keyScope.Purpose) - } - if err := scopedMgr.ForEachActiveAddress(ns, fn); err != nil { - return err - } - } - - return nil -} - // ChainParams returns the chain parameters for this address manager. func (m *Manager) ChainParams() *chaincfg.Params { // NOTE: No need for mutex here since the net field does not change diff --git a/wallet/wallet.go b/wallet/wallet.go index b760618..cdb1862 100644 --- a/wallet/wallet.go +++ b/wallet/wallet.go @@ -303,22 +303,18 @@ func (w *Wallet) SetChainSynced(synced bool) { w.chainClientSyncMtx.Unlock() } -// activeData returns the currently-active receiving addresses that exist within -// the wallet's default key scopes and all unspent outputs. This is primarily -// intended to provide the parameters for a rescan request. -func (w *Wallet) activeData(dbtx walletdb.ReadTx) ([]btcutil.Address, - []wtxmgr.Credit, error) { - +// activeData returns the currently-active receiving addresses and all unspent +// outputs. This is primarely intended to provide the parameters for a +// rescan request. +func (w *Wallet) activeData(dbtx walletdb.ReadTx) ([]btcutil.Address, []wtxmgr.Credit, error) { addrmgrNs := dbtx.ReadBucket(waddrmgrNamespaceKey) txmgrNs := dbtx.ReadBucket(wtxmgrNamespaceKey) var addrs []btcutil.Address - err := w.Manager.ForEachDefaultScopeActiveAddress( - addrmgrNs, func(addr btcutil.Address) error { - addrs = append(addrs, addr) - return nil - }, - ) + err := w.Manager.ForEachActiveAddress(addrmgrNs, func(addr btcutil.Address) error { + addrs = append(addrs, addr) + return nil + }) if err != nil { return nil, nil, err }