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:
commit
ae9416ad76
2 changed files with 35 additions and 8 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue