Merge pull request #676 from wpaulino/watch-default-account-addrs-only

waddrmgr+wallet: only watch addresses within default key scopes
This commit is contained in:
Olaoluwa Osuntokun 2020-02-18 16:46:49 -08:00 committed by GitHub
commit ae9416ad76
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 8 deletions

View file

@ -756,6 +756,29 @@ 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

View file

@ -303,18 +303,22 @@ func (w *Wallet) SetChainSynced(synced bool) {
w.chainClientSyncMtx.Unlock()
}
// 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) {
// 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) {
addrmgrNs := dbtx.ReadBucket(waddrmgrNamespaceKey)
txmgrNs := dbtx.ReadBucket(wtxmgrNamespaceKey)
var addrs []btcutil.Address
err := w.Manager.ForEachActiveAddress(addrmgrNs, func(addr btcutil.Address) error {
addrs = append(addrs, addr)
return nil
})
err := w.Manager.ForEachDefaultScopeActiveAddress(
addrmgrNs, func(addr btcutil.Address) error {
addrs = append(addrs, addr)
return nil
},
)
if err != nil {
return nil, nil, err
}