func (s *ScopedKeyManager) zeroSensitivePublicData() {
	for _, acctInfo := range s.acctInfo {
		acctInfo.acctKeyPub.Zero()
		acctInfo.acctKeyPub = nil
	}
}
zeroSensitivePublicData performs a best try effort to remove and zero all
sensitive public data associated with the address manager such as
hierarchical deterministic extended public keys and the crypto public keys.
package waddrmgr
import (
	"errors"
	"fmt"
	"sync"
	"github.com/gcash/bchd/bchec"
	"github.com/gcash/bchd/chaincfg"
	"github.com/gcash/bchutil"
	"github.com/gcash/bchutil/hdkeychain"
	"github.com/gcash/bchwallet/internal/zero"
	"github.com/gcash/bchwallet/walletdb"
)
type DerivationPath struct {
	Account uint32
	Branch uint32
	Index uint32
}
type KeyScope struct {
	Purpose uint32
	Coin uint32
}
type ScopedIndex struct {
	Scope KeyScope
	Index uint32
}
func (k *KeyScope) String() string {
	return fmt.Sprintf("m/%v'/%v'", k.Purpose, k.Coin)
}
type ScopeAddrSchema struct {
	ExternalAddrType AddressType
	InternalAddrType AddressType
}
var (
	KeyScopeBIP0044 = KeyScope{
		Purpose: 44,
		Coin:    0,
	}
	DefaultKeyScopes = []KeyScope{
		KeyScopeBIP0044,
	}
	ScopeAddrMap = map[KeyScope]ScopeAddrSchema{
		KeyScopeBIP0044: {
			InternalAddrType: PubKeyHash,
			ExternalAddrType: PubKeyHash,
		},
	}
)
type ScopedKeyManager struct {
	scope KeyScope
	addrSchema ScopeAddrSchema
	rootManager *Manager
	addrs map[addrKey]ManagedAddress
	acctInfo map[uint32]*accountInfo
	deriveOnUnlock []*unlockDeriveInfo
	mtx sync.RWMutex
}
func (s *ScopedKeyManager) Scope() KeyScope {
	return s.scope
}
func (s *ScopedKeyManager) AddrSchema() ScopeAddrSchema {
	return s.addrSchema
}