func (w *SeedWallet) SeedIndex() uint64 {
	w.mu.Lock()
	defer w.mu.Unlock()
	return w.store.SeedIndex()
}
SeedIndex returns the lowest seed index whose associated address is not
tracked by the wallet; in other words, the index that should be used to
generate a new address.
package wallet
import (
	"errors"
	"reflect"
	"sync"
	"go.sia.tech/siad/crypto"
	"go.sia.tech/siad/modules"
	"go.sia.tech/siad/types"
	"lukechampine.com/frand"
	"lukechampine.com/us/ed25519hash"
)
type SeedWallet struct {
	store Store
	mu    sync.Mutex
}
type seedWalletSubscriber struct {
	*SeedWallet
	cs ChainStore
}
func (s seedWalletSubscriber) ProcessConsensusChange(cc modules.ConsensusChange) {
	s.mu.Lock()
	s.cs.ApplyConsensusChange(FilterConsensusChange(cc, s.store, s.store.ChainHeight()))
	s.mu.Unlock()
}
func (w *SeedWallet) ConsensusSetSubscriber(store ChainStore) modules.ConsensusSetSubscriber {
	return seedWalletSubscriber{
		SeedWallet: w,
		cs:         store,
	}
}
func (w *SeedWallet) Balance(limbo bool) types.Currency {
	return SumOutputs(w.UnspentOutputs(limbo))
}
func (w *SeedWallet) ConsensusChangeID() modules.ConsensusChangeID {
	w.mu.Lock()
	defer w.mu.Unlock()
	return w.store.ConsensusChangeID()
}
func (w *SeedWallet) ChainHeight() types.BlockHeight {
	w.mu.Lock()
	defer w.mu.Unlock()
	return w.store.ChainHeight()
}
func (w *SeedWallet) OwnsAddress(addr types.UnlockHash) bool {
	w.mu.Lock()
	defer w.mu.Unlock()
	return w.store.OwnsAddress(addr)
}
func (w *SeedWallet) Addresses() []types.UnlockHash {
	w.mu.Lock()
	defer w.mu.Unlock()
	return w.store.Addresses()
}
func (w *SeedWallet) AddAddress(info SeedAddressInfo) {
	w.mu.Lock()
	defer w.mu.Unlock()
	w.store.AddAddress(info)
}
func (w *SeedWallet) AddressInfo(addr types.UnlockHash) (SeedAddressInfo, bool) {
	w.mu.Lock()
	defer w.mu.Unlock()
	return w.store.AddressInfo(addr)
}
func (w *SeedWallet) RemoveAddress(addr types.UnlockHash) {
	w.mu.Lock()
	defer w.mu.Unlock()
	w.store.RemoveAddress(addr)
}