Rename wallet package to keystore.
This package is used solely for the storage of private and public keys, and the addresses they represent. Since "wallet" is an overloaded term and a working wallet requires transaction history as well, rename this package and its data structures to more clearly reflect what it is for.
This commit is contained in:
parent
2d9fb71afd
commit
3dba4ba87d
9 changed files with 556 additions and 549 deletions
72
account.go
72
account.go
|
@ -24,8 +24,8 @@ import (
|
|||
|
||||
"github.com/conformal/btcjson"
|
||||
"github.com/conformal/btcutil"
|
||||
"github.com/conformal/btcwallet/keystore"
|
||||
"github.com/conformal/btcwallet/txstore"
|
||||
"github.com/conformal/btcwallet/wallet"
|
||||
"github.com/conformal/btcwire"
|
||||
)
|
||||
|
||||
|
@ -34,17 +34,17 @@ import (
|
|||
// addresses and keys), and tx and utxo stores, and a mutex to prevent
|
||||
// incorrect multiple access.
|
||||
type Account struct {
|
||||
name string
|
||||
*wallet.Wallet
|
||||
name string
|
||||
KeyStore *keystore.Store
|
||||
TxStore *txstore.Store
|
||||
lockedOutpoints map[btcwire.OutPoint]struct{}
|
||||
FeeIncrement btcutil.Amount
|
||||
}
|
||||
|
||||
func newAccount(name string, w *wallet.Wallet, txs *txstore.Store) *Account {
|
||||
func newAccount(name string, keys *keystore.Store, txs *txstore.Store) *Account {
|
||||
return &Account{
|
||||
name: name,
|
||||
Wallet: w,
|
||||
KeyStore: keys,
|
||||
TxStore: txs,
|
||||
lockedOutpoints: map[btcwire.OutPoint]struct{}{},
|
||||
FeeIncrement: defaultFeeIncrement,
|
||||
|
@ -53,12 +53,12 @@ func newAccount(name string, w *wallet.Wallet, txs *txstore.Store) *Account {
|
|||
|
||||
// Lock locks the underlying wallet for an account.
|
||||
func (a *Account) Lock() error {
|
||||
switch err := a.Wallet.Lock(); err {
|
||||
switch err := a.KeyStore.Lock(); err {
|
||||
case nil:
|
||||
server.NotifyWalletLockStateChange(a.Name(), true)
|
||||
server.NotifyWalletLockStateChange(a.KeyStore.Name(), true)
|
||||
return nil
|
||||
|
||||
case wallet.ErrWalletLocked:
|
||||
case keystore.ErrLocked:
|
||||
// Do not pass wallet already locked errors to the caller.
|
||||
return nil
|
||||
|
||||
|
@ -69,11 +69,11 @@ func (a *Account) Lock() error {
|
|||
|
||||
// Unlock unlocks the underlying wallet for an account.
|
||||
func (a *Account) Unlock(passphrase []byte) error {
|
||||
if err := a.Wallet.Unlock(passphrase); err != nil {
|
||||
if err := a.KeyStore.Unlock(passphrase); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
server.NotifyWalletLockStateChange(a.Name(), false)
|
||||
server.NotifyWalletLockStateChange(a.KeyStore.Name(), false)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -173,7 +173,7 @@ func (a *Account) CalculateAddressBalance(addr btcutil.Address, confirms int) (b
|
|||
// one transaction spending to it in the blockchain or btcd mempool), the next
|
||||
// chained address is returned.
|
||||
func (a *Account) CurrentAddress() (btcutil.Address, error) {
|
||||
addr := a.Wallet.LastChainedAddress()
|
||||
addr := a.KeyStore.LastChainedAddress()
|
||||
|
||||
// Get next chained address if the last one has already been used.
|
||||
if a.AddressUsed(addr) {
|
||||
|
@ -203,7 +203,8 @@ func (a *Account) ListSinceBlock(since, curBlockHeight int32,
|
|||
continue
|
||||
}
|
||||
|
||||
jsonResults, err := txRecord.ToJSON(a.name, curBlockHeight, a.Net())
|
||||
jsonResults, err := txRecord.ToJSON(a.name, curBlockHeight,
|
||||
a.KeyStore.Net())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -234,7 +235,8 @@ func (a *Account) ListTransactions(from, count int) ([]btcjson.ListTransactionsR
|
|||
lastLookupIdx := len(records) - count
|
||||
// Search in reverse order: lookup most recently-added first.
|
||||
for i := len(records) - 1; i >= from && i >= lastLookupIdx; i-- {
|
||||
jsonResults, err := records[i].ToJSON(a.name, bs.Height, a.Net())
|
||||
jsonResults, err := records[i].ToJSON(a.name, bs.Height,
|
||||
a.KeyStore.Net())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -279,7 +281,8 @@ func (a *Account) ListAddressTransactions(pkHashes map[string]struct{}) (
|
|||
if _, ok := pkHashes[string(apkh.ScriptAddress())]; !ok {
|
||||
continue
|
||||
}
|
||||
jsonResult, err := c.ToJSON(a.name, bs.Height, a.Net())
|
||||
jsonResult, err := c.ToJSON(a.name, bs.Height,
|
||||
a.KeyStore.Net())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -310,7 +313,8 @@ func (a *Account) ListAllTransactions() ([]btcjson.ListTransactionsResult, error
|
|||
// Search in reverse order: lookup most recently-added first.
|
||||
records := a.TxStore.Records()
|
||||
for i := len(records) - 1; i >= 0; i-- {
|
||||
jsonResults, err := records[i].ToJSON(a.name, bs.Height, a.Net())
|
||||
jsonResults, err := records[i].ToJSON(a.name, bs.Height,
|
||||
a.KeyStore.Net())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -326,9 +330,9 @@ func (a *Account) DumpPrivKeys() ([]string, error) {
|
|||
// Iterate over each active address, appending the private
|
||||
// key to privkeys.
|
||||
privkeys := []string{}
|
||||
for _, info := range a.Wallet.ActiveAddresses() {
|
||||
for _, info := range a.KeyStore.ActiveAddresses() {
|
||||
// Only those addresses with keys needed.
|
||||
pka, ok := info.(wallet.PubKeyAddress)
|
||||
pka, ok := info.(keystore.PubKeyAddress)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
|
@ -349,12 +353,12 @@ func (a *Account) DumpPrivKeys() ([]string, error) {
|
|||
// single wallet address.
|
||||
func (a *Account) DumpWIFPrivateKey(addr btcutil.Address) (string, error) {
|
||||
// Get private key from wallet if it exists.
|
||||
address, err := a.Wallet.Address(addr)
|
||||
address, err := a.KeyStore.Address(addr)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
pka, ok := address.(wallet.PubKeyAddress)
|
||||
pka, ok := address.(keystore.PubKeyAddress)
|
||||
if !ok {
|
||||
return "", fmt.Errorf("address %s is not a key type", addr)
|
||||
}
|
||||
|
@ -368,11 +372,11 @@ func (a *Account) DumpWIFPrivateKey(addr btcutil.Address) (string, error) {
|
|||
|
||||
// ImportPrivateKey imports a private key to the account's wallet and
|
||||
// writes the new wallet to disk.
|
||||
func (a *Account) ImportPrivateKey(wif *btcutil.WIF, bs *wallet.BlockStamp,
|
||||
func (a *Account) ImportPrivateKey(wif *btcutil.WIF, bs *keystore.BlockStamp,
|
||||
rescan bool) (string, error) {
|
||||
|
||||
// Attempt to import private key into wallet.
|
||||
addr, err := a.Wallet.ImportPrivateKey(wif, bs)
|
||||
addr, err := a.KeyStore.ImportPrivateKey(wif, bs)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
@ -430,13 +434,13 @@ func (a *Account) ExportToDirectory(dirBaseName string) error {
|
|||
// should be exported quickly, either to file or to an rpc caller, and then
|
||||
// dropped from scope.
|
||||
func (a *Account) ExportWatchingWallet() (*Account, error) {
|
||||
ww, err := a.Wallet.ExportWatchingWallet()
|
||||
ww, err := a.KeyStore.ExportWatchingWallet()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
wa := *a
|
||||
wa.Wallet = ww
|
||||
wa.KeyStore = ww
|
||||
return &wa, nil
|
||||
}
|
||||
|
||||
|
@ -446,7 +450,7 @@ func (a *Account) exportBase64() (map[string]string, error) {
|
|||
buf := bytes.Buffer{}
|
||||
m := make(map[string]string)
|
||||
|
||||
_, err := a.Wallet.WriteTo(&buf)
|
||||
_, err := a.KeyStore.WriteTo(&buf)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -517,7 +521,7 @@ func (a *Account) Track() {
|
|||
//
|
||||
// TODO: return as slice? (doesn't have to be ordered, or
|
||||
// SortedActiveAddresses would be fine.)
|
||||
addrMap := a.ActiveAddresses()
|
||||
addrMap := a.KeyStore.ActiveAddresses()
|
||||
addrs := make([]btcutil.Address, 0, len(addrMap))
|
||||
for addr := range addrMap {
|
||||
addrs = append(addrs, addr)
|
||||
|
@ -542,9 +546,9 @@ func (a *Account) Track() {
|
|||
func (a *Account) RescanActiveJob() (*RescanJob, error) {
|
||||
// Determine the block necesary to start the rescan for all active
|
||||
// addresses.
|
||||
height := a.SyncHeight()
|
||||
height := a.KeyStore.SyncHeight()
|
||||
|
||||
actives := a.SortedActiveAddresses()
|
||||
actives := a.KeyStore.SortedActiveAddresses()
|
||||
addrs := make([]btcutil.Address, 0, len(actives))
|
||||
for i := range actives {
|
||||
addrs = append(addrs, actives[i].Address())
|
||||
|
@ -594,7 +598,7 @@ func (a *Account) ResendUnminedTxs() {
|
|||
// SortedActivePaymentAddresses returns a slice of all active payment
|
||||
// addresses in an account.
|
||||
func (a *Account) SortedActivePaymentAddresses() []string {
|
||||
infos := a.Wallet.SortedActiveAddresses()
|
||||
infos := a.KeyStore.SortedActiveAddresses()
|
||||
|
||||
addrs := make([]string, len(infos))
|
||||
for i, info := range infos {
|
||||
|
@ -607,7 +611,7 @@ func (a *Account) SortedActivePaymentAddresses() []string {
|
|||
// ActivePaymentAddresses returns a set of all active pubkey hashes
|
||||
// in an account.
|
||||
func (a *Account) ActivePaymentAddresses() map[string]struct{} {
|
||||
infos := a.ActiveAddresses()
|
||||
infos := a.KeyStore.ActiveAddresses()
|
||||
|
||||
addrs := make(map[string]struct{}, len(infos))
|
||||
for _, info := range infos {
|
||||
|
@ -630,7 +634,7 @@ func (a *Account) NewAddress() (btcutil.Address, error) {
|
|||
}
|
||||
|
||||
// Get next address from wallet.
|
||||
addr, err := a.Wallet.NextChainedAddress(&bs, cfg.KeypoolSize)
|
||||
addr, err := a.KeyStore.NextChainedAddress(&bs, cfg.KeypoolSize)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -665,7 +669,7 @@ func (a *Account) NewChangeAddress() (btcutil.Address, error) {
|
|||
}
|
||||
|
||||
// Get next chained change address from wallet.
|
||||
addr, err := a.Wallet.ChangeAddress(&bs, cfg.KeypoolSize)
|
||||
addr, err := a.KeyStore.ChangeAddress(&bs, cfg.KeypoolSize)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -691,13 +695,13 @@ func (a *Account) NewChangeAddress() (btcutil.Address, error) {
|
|||
func (a *Account) RecoverAddresses(n int) error {
|
||||
// Get info on the last chained address. The rescan starts at the
|
||||
// earliest block height the last chained address might appear at.
|
||||
last := a.Wallet.LastChainedAddress()
|
||||
lastInfo, err := a.Wallet.Address(last)
|
||||
last := a.KeyStore.LastChainedAddress()
|
||||
lastInfo, err := a.KeyStore.Address(last)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
addrs, err := a.Wallet.ExtendActiveAddresses(n, cfg.KeypoolSize)
|
||||
addrs, err := a.KeyStore.ExtendActiveAddresses(n, cfg.KeypoolSize)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
42
acctmgr.go
42
acctmgr.go
|
@ -30,8 +30,8 @@ import (
|
|||
"github.com/conformal/btcchain"
|
||||
"github.com/conformal/btcjson"
|
||||
"github.com/conformal/btcutil"
|
||||
"github.com/conformal/btcwallet/keystore"
|
||||
"github.com/conformal/btcwallet/txstore"
|
||||
"github.com/conformal/btcwallet/wallet"
|
||||
"github.com/conformal/btcwire"
|
||||
)
|
||||
|
||||
|
@ -219,9 +219,9 @@ func openSavedAccount(name string, cfg *config) (*Account, error) {
|
|||
}
|
||||
}
|
||||
|
||||
wlt := new(wallet.Wallet)
|
||||
keys := new(keystore.Store)
|
||||
txs := txstore.New()
|
||||
a := newAccount(name, wlt, txs)
|
||||
a := newAccount(name, keys, txs)
|
||||
|
||||
walletPath := accountFilename("wallet.bin", name, netdir)
|
||||
txstorePath := accountFilename("tx.bin", name, netdir)
|
||||
|
@ -236,7 +236,7 @@ func openSavedAccount(name string, cfg *config) (*Account, error) {
|
|||
msg := fmt.Sprintf("cannot open wallet file: %s", err)
|
||||
return nil, &walletOpenError{msg}
|
||||
}
|
||||
if _, err = wlt.ReadFrom(walletFi); err != nil {
|
||||
if _, err = keys.ReadFrom(walletFi); err != nil {
|
||||
if err := walletFi.Close(); err != nil {
|
||||
log.Warnf("Cannot close wallet file: %v", err)
|
||||
}
|
||||
|
@ -329,12 +329,12 @@ func writeUnsyncedWallet(a *Account, path string) error {
|
|||
// to SyncHeight will use the wallet creation height, or possibly
|
||||
// an earlier height for imported keys.
|
||||
netdir, _ := filepath.Split(path)
|
||||
a.SetSyncedWith(nil)
|
||||
a.KeyStore.SetSyncedWith(nil)
|
||||
tmpwallet, err := ioutil.TempFile(netdir, "wallet.bin")
|
||||
if err != nil {
|
||||
return fmt.Errorf("cannot create temporary wallet: %v", err)
|
||||
}
|
||||
if _, err := a.Wallet.WriteTo(tmpwallet); err != nil {
|
||||
if _, err := a.KeyStore.WriteTo(tmpwallet); err != nil {
|
||||
return fmt.Errorf("cannot write back unsynced wallet: %v", err)
|
||||
}
|
||||
tmpwalletpath := tmpwallet.Name()
|
||||
|
@ -552,7 +552,8 @@ func (am *AccountManager) rescanListener() {
|
|||
case *RescanProgressMsg:
|
||||
for acct, addrs := range e.Addresses {
|
||||
for i := range addrs {
|
||||
err := acct.SetSyncStatus(addrs[i], wallet.PartialSync(e.Height))
|
||||
err := acct.KeyStore.SetSyncStatus(addrs[i],
|
||||
keystore.PartialSync(e.Height))
|
||||
if err != nil {
|
||||
log.Errorf("Error marking address partially synced: %v", err)
|
||||
continue
|
||||
|
@ -577,7 +578,8 @@ func (am *AccountManager) rescanListener() {
|
|||
for acct, addrs := range e.Addresses {
|
||||
n += len(addrs)
|
||||
for i := range addrs {
|
||||
err := acct.SetSyncStatus(addrs[i], wallet.FullSync{})
|
||||
err := acct.KeyStore.SetSyncStatus(addrs[i],
|
||||
keystore.FullSync{})
|
||||
if err != nil {
|
||||
log.Errorf("Error marking address synced: %v", err)
|
||||
continue
|
||||
|
@ -672,13 +674,13 @@ func (am *AccountManager) MarkAddressForAccount(address btcutil.Address,
|
|||
}
|
||||
|
||||
// Address looks up an address if it is known to wallet at all.
|
||||
func (am *AccountManager) Address(addr btcutil.Address) (wallet.WalletAddress, error) {
|
||||
func (am *AccountManager) Address(addr btcutil.Address) (keystore.WalletAddress, error) {
|
||||
a, err := am.AccountByAddress(addr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return a.Address(addr)
|
||||
return a.KeyStore.Address(addr)
|
||||
}
|
||||
|
||||
// AllAccounts returns a slice of all managed accounts.
|
||||
|
@ -748,7 +750,7 @@ func (am *AccountManager) Rollback(height int32, hash *btcwire.ShaHash) error {
|
|||
// BlockNotify notifies all wallet clients of any changes from the new block,
|
||||
// including changed balances. Each account is then set to be synced
|
||||
// with the latest block.
|
||||
func (am *AccountManager) BlockNotify(bs *wallet.BlockStamp) {
|
||||
func (am *AccountManager) BlockNotify(bs *keystore.BlockStamp) {
|
||||
for _, a := range am.AllAccounts() {
|
||||
// TODO: need a flag or check that the utxo store was actually
|
||||
// modified, or this will notify even if there are no balance
|
||||
|
@ -766,8 +768,8 @@ func (am *AccountManager) BlockNotify(bs *wallet.BlockStamp) {
|
|||
|
||||
// If this is the default account, update the block all accounts
|
||||
// are synced with, and schedule a wallet write.
|
||||
if a.Name() == "" {
|
||||
a.Wallet.SetSyncedWith(bs)
|
||||
if a.KeyStore.Name() == "" {
|
||||
a.KeyStore.SetSyncedWith(bs)
|
||||
am.ds.ScheduleWalletWrite(a)
|
||||
}
|
||||
}
|
||||
|
@ -825,7 +827,7 @@ func (am *AccountManager) CreateEncryptedWallet(passphrase []byte) error {
|
|||
}
|
||||
|
||||
// Create new wallet in memory.
|
||||
wlt, err := wallet.NewWallet("", "Default acccount", passphrase,
|
||||
keys, err := keystore.NewStore("", "Default acccount", passphrase,
|
||||
activeNet.Params, &bs, cfg.KeypoolSize)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -834,7 +836,7 @@ func (am *AccountManager) CreateEncryptedWallet(passphrase []byte) error {
|
|||
// Create new account and begin managing with the global account
|
||||
// manager. Registering will fail if the new account can not be
|
||||
// written immediately to disk.
|
||||
a := newAccount("", wlt, txstore.New())
|
||||
a := newAccount("", keys, txstore.New())
|
||||
if err := am.RegisterNewAccount(a); err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -858,7 +860,7 @@ func (am *AccountManager) ChangePassphrase(old, new []byte) error {
|
|||
|
||||
// Change passphrase for each unlocked wallet.
|
||||
for _, a := range accts {
|
||||
err = a.Wallet.ChangePassphrase(new)
|
||||
err = a.KeyStore.ChangePassphrase(new)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -893,7 +895,7 @@ func (am *AccountManager) DumpKeys() ([]string, error) {
|
|||
keys := []string{}
|
||||
for _, a := range am.AllAccounts() {
|
||||
switch walletKeys, err := a.DumpPrivKeys(); err {
|
||||
case wallet.ErrWalletLocked:
|
||||
case keystore.ErrLocked:
|
||||
return nil, err
|
||||
|
||||
case nil:
|
||||
|
@ -1055,7 +1057,7 @@ func (am *AccountManager) ListUnspent(minconf, maxconf int,
|
|||
result := &btcjson.ListUnspentResult{
|
||||
TxId: credit.Tx().Sha().String(),
|
||||
Vout: credit.OutputIndex,
|
||||
Account: a.Name(),
|
||||
Account: a.KeyStore.Name(),
|
||||
ScriptPubKey: hex.EncodeToString(credit.TxOut().PkScript),
|
||||
Amount: credit.Amount().ToUnit(btcutil.AmountBTC),
|
||||
Confirmations: int64(confs),
|
||||
|
@ -1082,7 +1084,7 @@ func (am *AccountManager) ListUnspent(minconf, maxconf int,
|
|||
// caller to mark the progress that the rescan is expected to complete
|
||||
// through, if the account otherwise does not contain any recently
|
||||
// seen blocks.
|
||||
func (am *AccountManager) RescanActiveAddresses(markBestBlock *wallet.BlockStamp) error {
|
||||
func (am *AccountManager) RescanActiveAddresses(markBestBlock *keystore.BlockStamp) error {
|
||||
var job *RescanJob
|
||||
var defaultAcct *Account
|
||||
for _, a := range am.AllAccounts() {
|
||||
|
@ -1102,7 +1104,7 @@ func (am *AccountManager) RescanActiveAddresses(markBestBlock *wallet.BlockStamp
|
|||
}
|
||||
if job != nil {
|
||||
if markBestBlock != nil {
|
||||
defaultAcct.SetSyncedWith(markBestBlock)
|
||||
defaultAcct.KeyStore.SetSyncedWith(markBestBlock)
|
||||
}
|
||||
|
||||
// Submit merged job and block until rescan completes.
|
||||
|
|
16
createtx.go
16
createtx.go
|
@ -27,8 +27,8 @@ import (
|
|||
"github.com/conformal/btcchain"
|
||||
"github.com/conformal/btcscript"
|
||||
"github.com/conformal/btcutil"
|
||||
"github.com/conformal/btcwallet/keystore"
|
||||
"github.com/conformal/btcwallet/txstore"
|
||||
"github.com/conformal/btcwallet/wallet"
|
||||
"github.com/conformal/btcwire"
|
||||
)
|
||||
|
||||
|
@ -118,8 +118,8 @@ func (a *Account) txToPairs(pairs map[string]btcutil.Amount,
|
|||
minconf int) (*CreatedTx, error) {
|
||||
|
||||
// Wallet must be unlocked to compose transaction.
|
||||
if a.IsLocked() {
|
||||
return nil, wallet.ErrWalletLocked
|
||||
if a.KeyStore.IsLocked() {
|
||||
return nil, keystore.ErrLocked
|
||||
}
|
||||
|
||||
// Create a new transaction which will include all input scripts.
|
||||
|
@ -228,7 +228,7 @@ func (a *Account) txToPairs(pairs map[string]btcutil.Amount,
|
|||
if change > 0 {
|
||||
// Get a new change address if one has not already been found.
|
||||
if changeAddr == nil {
|
||||
changeAddr, err = a.ChangeAddress(&bs, cfg.KeypoolSize)
|
||||
changeAddr, err = a.KeyStore.ChangeAddress(&bs, cfg.KeypoolSize)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get next address: %s", err)
|
||||
}
|
||||
|
@ -267,16 +267,16 @@ func (a *Account) txToPairs(pairs map[string]btcutil.Amount,
|
|||
continue // don't handle inputs to this yes
|
||||
}
|
||||
|
||||
ai, err := a.Address(apkh)
|
||||
ai, err := a.KeyStore.Address(apkh)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("cannot get address info: %v", err)
|
||||
}
|
||||
|
||||
pka := ai.(wallet.PubKeyAddress)
|
||||
pka := ai.(keystore.PubKeyAddress)
|
||||
|
||||
privkey, err := pka.PrivKey()
|
||||
if err == wallet.ErrWalletLocked {
|
||||
return nil, wallet.ErrWalletLocked
|
||||
if err == keystore.ErrLocked {
|
||||
return nil, keystore.ErrLocked
|
||||
} else if err != nil {
|
||||
return nil, fmt.Errorf("cannot get address key: %v", err)
|
||||
}
|
||||
|
|
|
@ -83,8 +83,8 @@ func TestAllowFree(t *testing.T) {
|
|||
|
||||
func TestFakeTxs(t *testing.T) {
|
||||
// First we need a wallet.
|
||||
w, err := wallet.NewWallet("banana wallet", "", []byte("banana"),
|
||||
btcwire.MainNet, &wallet.BlockStamp{}, 100)
|
||||
w, err := keystore.NewStore("banana wallet", "", []byte("banana"),
|
||||
btcwire.MainNet, &keystore.BlockStamp{}, 100)
|
||||
if err != nil {
|
||||
t.Errorf("Can not create encrypted wallet: %s", err)
|
||||
return
|
||||
|
@ -101,7 +101,7 @@ func TestFakeTxs(t *testing.T) {
|
|||
// This will pass validation because btcscript is unaware of invalid
|
||||
// tx inputs, however, this example would fail in btcd.
|
||||
utxo := &tx.Utxo{}
|
||||
addr, err := w.NextChainedAddress(&wallet.BlockStamp{}, 100)
|
||||
addr, err := w.NextChainedAddress(&keystore.BlockStamp{}, 100)
|
||||
if err != nil {
|
||||
t.Errorf("Cannot get next address: %s", err)
|
||||
return
|
||||
|
|
|
@ -394,7 +394,7 @@ func (a *Account) writeWallet(dir string) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err = a.Wallet.WriteTo(tmpfile); err != nil {
|
||||
if _, err = a.KeyStore.WriteTo(tmpfile); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -14,7 +14,7 @@
|
|||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
package wallet
|
||||
package keystore
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
|
@ -35,7 +35,7 @@ import (
|
|||
var tstNetParams = &btcnet.MainNetParams
|
||||
|
||||
func TestBtcAddressSerializer(t *testing.T) {
|
||||
fakeWallet := &Wallet{net: (*netParams)(tstNetParams)}
|
||||
fakeWallet := &Store{net: (*netParams)(tstNetParams)}
|
||||
kdfp := &kdfParameters{
|
||||
mem: 1024,
|
||||
nIter: 5,
|
||||
|
@ -70,7 +70,7 @@ func TestBtcAddressSerializer(t *testing.T) {
|
|||
}
|
||||
|
||||
var readAddr btcAddress
|
||||
readAddr.wallet = fakeWallet
|
||||
readAddr.store = fakeWallet
|
||||
_, err = readAddr.ReadFrom(buf)
|
||||
if err != nil {
|
||||
t.Error(err.Error())
|
||||
|
@ -88,7 +88,7 @@ func TestBtcAddressSerializer(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestScriptAddressSerializer(t *testing.T) {
|
||||
fakeWallet := &Wallet{net: (*netParams)(tstNetParams)}
|
||||
fakeWallet := &Store{net: (*netParams)(tstNetParams)}
|
||||
script := []byte{btcscript.OP_TRUE, btcscript.OP_DUP,
|
||||
btcscript.OP_DROP}
|
||||
addr, err := newScriptAddress(fakeWallet, script, &BlockStamp{})
|
||||
|
@ -105,7 +105,7 @@ func TestScriptAddressSerializer(t *testing.T) {
|
|||
}
|
||||
|
||||
var readAddr scriptAddress
|
||||
readAddr.wallet = fakeWallet
|
||||
readAddr.store = fakeWallet
|
||||
_, err = readAddr.ReadFrom(buf)
|
||||
if err != nil {
|
||||
t.Error(err.Error())
|
||||
|
@ -119,7 +119,7 @@ func TestScriptAddressSerializer(t *testing.T) {
|
|||
|
||||
func TestWalletCreationSerialization(t *testing.T) {
|
||||
createdAt := &BlockStamp{}
|
||||
w1, err := NewWallet("banana wallet", "A wallet for testing.",
|
||||
w1, err := NewStore("banana wallet", "A wallet for testing.",
|
||||
[]byte("banana"), tstNetParams, createdAt, 100)
|
||||
if err != nil {
|
||||
t.Error("Error creating new wallet: " + err.Error())
|
||||
|
@ -133,7 +133,7 @@ func TestWalletCreationSerialization(t *testing.T) {
|
|||
return
|
||||
}
|
||||
|
||||
w2 := new(Wallet)
|
||||
w2 := new(Store)
|
||||
_, err = w2.ReadFrom(buf)
|
||||
if err != nil {
|
||||
t.Error("Error reading newly written wallet: " + err.Error())
|
||||
|
@ -331,7 +331,7 @@ func TestWalletPubkeyChaining(t *testing.T) {
|
|||
// Set a reasonable keypool size that isn't too big nor too small for testing.
|
||||
const keypoolSize = 5
|
||||
|
||||
w, err := NewWallet("banana wallet", "A wallet for testing.",
|
||||
w, err := NewStore("banana wallet", "A wallet for testing.",
|
||||
[]byte("banana"), tstNetParams, &BlockStamp{}, keypoolSize)
|
||||
if err != nil {
|
||||
t.Error("Error creating new wallet: " + err.Error())
|
||||
|
@ -397,7 +397,7 @@ func TestWalletPubkeyChaining(t *testing.T) {
|
|||
t.Errorf("Error writing wallet with missing private key: %v", err)
|
||||
return
|
||||
}
|
||||
w2 := new(Wallet)
|
||||
w2 := new(Store)
|
||||
_, err = w2.ReadFrom(serializedWallet)
|
||||
if err != nil {
|
||||
t.Errorf("Error reading wallet with missing private key: %v", err)
|
||||
|
@ -507,7 +507,7 @@ func TestWalletPubkeyChaining(t *testing.T) {
|
|||
func TestWatchingWalletExport(t *testing.T) {
|
||||
const keypoolSize = 10
|
||||
createdAt := &BlockStamp{}
|
||||
w, err := NewWallet("banana wallet", "A wallet for testing.",
|
||||
w, err := NewStore("banana wallet", "A wallet for testing.",
|
||||
[]byte("banana"), tstNetParams, createdAt, keypoolSize)
|
||||
if err != nil {
|
||||
t.Error("Error creating new wallet: " + err.Error())
|
||||
|
@ -681,7 +681,7 @@ func TestWatchingWalletExport(t *testing.T) {
|
|||
t.Errorf("Cannot write watching wallet: %v", err)
|
||||
return
|
||||
}
|
||||
ww2 := new(Wallet)
|
||||
ww2 := new(Store)
|
||||
_, err = ww2.ReadFrom(buf)
|
||||
if err != nil {
|
||||
t.Errorf("Cannot read watching wallet: %v", err)
|
||||
|
@ -695,11 +695,11 @@ func TestWatchingWalletExport(t *testing.T) {
|
|||
}
|
||||
|
||||
// Verify that nonsensical functions fail with correct error.
|
||||
if err := ww.Lock(); err != ErrWalletIsWatchingOnly {
|
||||
if err := ww.Lock(); err != ErrWatchingOnly {
|
||||
t.Errorf("Nonsensical func Lock returned no or incorrect error: %v", err)
|
||||
return
|
||||
}
|
||||
if err := ww.Unlock([]byte("banana")); err != ErrWalletIsWatchingOnly {
|
||||
if err := ww.Unlock([]byte("banana")); err != ErrWatchingOnly {
|
||||
t.Errorf("Nonsensical func Unlock returned no or incorrect error: %v", err)
|
||||
return
|
||||
}
|
||||
|
@ -708,11 +708,11 @@ func TestWatchingWalletExport(t *testing.T) {
|
|||
t.Errorf("generator isnt' present in wallet")
|
||||
}
|
||||
gpk := generator.(PubKeyAddress)
|
||||
if _, err := gpk.PrivKey(); err != ErrWalletIsWatchingOnly {
|
||||
if _, err := gpk.PrivKey(); err != ErrWatchingOnly {
|
||||
t.Errorf("Nonsensical func AddressKey returned no or incorrect error: %v", err)
|
||||
return
|
||||
}
|
||||
if _, err := ww.ExportWatchingWallet(); err != ErrWalletIsWatchingOnly {
|
||||
if _, err := ww.ExportWatchingWallet(); err != ErrWatchingOnly {
|
||||
t.Errorf("Nonsensical func ExportWatchingWallet returned no or incorrect error: %v", err)
|
||||
return
|
||||
}
|
||||
|
@ -721,7 +721,7 @@ func TestWatchingWalletExport(t *testing.T) {
|
|||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := ww.ImportPrivateKey(wif, createdAt); err != ErrWalletIsWatchingOnly {
|
||||
if _, err := ww.ImportPrivateKey(wif, createdAt); err != ErrWatchingOnly {
|
||||
t.Errorf("Nonsensical func ImportPrivateKey returned no or incorrect error: %v", err)
|
||||
return
|
||||
}
|
||||
|
@ -731,7 +731,7 @@ func TestImportPrivateKey(t *testing.T) {
|
|||
const keypoolSize = 10
|
||||
createHeight := int32(100)
|
||||
createdAt := &BlockStamp{Height: createHeight}
|
||||
w, err := NewWallet("banana wallet", "A wallet for testing.",
|
||||
w, err := NewStore("banana wallet", "A wallet for testing.",
|
||||
[]byte("banana"), tstNetParams, createdAt, keypoolSize)
|
||||
if err != nil {
|
||||
t.Error("Error creating new wallet: " + err.Error())
|
||||
|
@ -802,7 +802,7 @@ func TestImportPrivateKey(t *testing.T) {
|
|||
t.Errorf("Cannot write wallet: %v", err)
|
||||
return
|
||||
}
|
||||
w2 := new(Wallet)
|
||||
w2 := new(Store)
|
||||
_, err = w2.ReadFrom(buf)
|
||||
if err != nil {
|
||||
t.Errorf("Cannot read wallet: %v", err)
|
||||
|
@ -834,7 +834,7 @@ func TestImportPrivateKey(t *testing.T) {
|
|||
t.Errorf("Cannot write wallet: %v", err)
|
||||
return
|
||||
}
|
||||
w3 := new(Wallet)
|
||||
w3 := new(Store)
|
||||
_, err = w3.ReadFrom(buf)
|
||||
if err != nil {
|
||||
t.Errorf("Cannot read wallet: %v", err)
|
||||
|
@ -901,7 +901,7 @@ func TestImportScript(t *testing.T) {
|
|||
const keypoolSize = 10
|
||||
createHeight := int32(100)
|
||||
createdAt := &BlockStamp{Height: createHeight}
|
||||
w, err := NewWallet("banana wallet", "A wallet for testing.",
|
||||
w, err := NewStore("banana wallet", "A wallet for testing.",
|
||||
[]byte("banana"), tstNetParams, createdAt, keypoolSize)
|
||||
if err != nil {
|
||||
t.Error("Error creating new wallet: " + err.Error())
|
||||
|
@ -1020,7 +1020,7 @@ func TestImportScript(t *testing.T) {
|
|||
t.Errorf("Cannot write wallet: %v", err)
|
||||
return
|
||||
}
|
||||
w2 := new(Wallet)
|
||||
w2 := new(Store)
|
||||
_, err = w2.ReadFrom(buf)
|
||||
if err != nil {
|
||||
t.Errorf("Cannot read wallet: %v", err)
|
||||
|
@ -1137,7 +1137,7 @@ func TestImportScript(t *testing.T) {
|
|||
t.Errorf("Cannot write wallet: %v", err)
|
||||
return
|
||||
}
|
||||
w3 := new(Wallet)
|
||||
w3 := new(Store)
|
||||
_, err = w3.ReadFrom(buf)
|
||||
if err != nil {
|
||||
t.Errorf("Cannot read wallet: %v", err)
|
||||
|
@ -1183,7 +1183,7 @@ func TestImportScript(t *testing.T) {
|
|||
func TestChangePassphrase(t *testing.T) {
|
||||
const keypoolSize = 10
|
||||
createdAt := &BlockStamp{}
|
||||
w, err := NewWallet("banana wallet", "A wallet for testing.",
|
||||
w, err := NewStore("banana wallet", "A wallet for testing.",
|
||||
[]byte("banana"), tstNetParams, createdAt, keypoolSize)
|
||||
if err != nil {
|
||||
t.Error("Error creating new wallet: " + err.Error())
|
||||
|
@ -1191,7 +1191,7 @@ func TestChangePassphrase(t *testing.T) {
|
|||
}
|
||||
|
||||
// Changing the passphrase with a locked wallet must fail with ErrWalletLocked.
|
||||
if err := w.ChangePassphrase([]byte("potato")); err != ErrWalletLocked {
|
||||
if err := w.ChangePassphrase([]byte("potato")); err != ErrLocked {
|
||||
t.Errorf("Changing passphrase on a locked wallet did not fail correctly: %v", err)
|
||||
return
|
||||
}
|
23
rpcclient.go
23
rpcclient.go
|
@ -25,8 +25,8 @@ import (
|
|||
"github.com/conformal/btcrpcclient"
|
||||
"github.com/conformal/btcscript"
|
||||
"github.com/conformal/btcutil"
|
||||
"github.com/conformal/btcwallet/keystore"
|
||||
"github.com/conformal/btcwallet/txstore"
|
||||
"github.com/conformal/btcwallet/wallet"
|
||||
"github.com/conformal/btcwire"
|
||||
"github.com/conformal/btcws"
|
||||
)
|
||||
|
@ -87,7 +87,7 @@ type (
|
|||
|
||||
func (n blockConnected) handleNotification(c *rpcClient) error {
|
||||
// Update the blockstamp for the newly-connected block.
|
||||
bs := wallet.BlockStamp{
|
||||
bs := keystore.BlockStamp{
|
||||
Height: n.height,
|
||||
Hash: *n.hash,
|
||||
}
|
||||
|
@ -220,11 +220,12 @@ func (n recvTx) handleNotification(c *rpcClient) error {
|
|||
return err
|
||||
}
|
||||
AcctMgr.ds.ScheduleTxStoreWrite(a)
|
||||
ltr, err := cred.ToJSON(a.Name(), bs.Height, a.Wallet.Net())
|
||||
ltr, err := cred.ToJSON(a.KeyStore.Name(), bs.Height,
|
||||
a.KeyStore.Net())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
server.NotifyNewTxDetails(a.Name(), ltr)
|
||||
server.NotifyNewTxDetails(a.KeyStore.Name(), ltr)
|
||||
break // check whether next txout is a wallet txout
|
||||
}
|
||||
}
|
||||
|
@ -260,7 +261,7 @@ type rpcClient struct {
|
|||
*btcrpcclient.Client // client to btcd
|
||||
|
||||
mtx sync.Mutex
|
||||
blockStamp wallet.BlockStamp
|
||||
blockStamp keystore.BlockStamp
|
||||
|
||||
enqueueNotification chan notification
|
||||
dequeueNotification chan notification
|
||||
|
@ -271,7 +272,7 @@ type rpcClient struct {
|
|||
|
||||
func newRPCClient(certs []byte) (*rpcClient, error) {
|
||||
client := rpcClient{
|
||||
blockStamp: wallet.BlockStamp{
|
||||
blockStamp: keystore.BlockStamp{
|
||||
Height: int32(btcutil.BlockHeightUnknown),
|
||||
},
|
||||
enqueueNotification: make(chan notification),
|
||||
|
@ -433,7 +434,7 @@ func (c *rpcClient) handleNotifications() {
|
|||
// block from the RPC client. If no blocks have been seen (the height is -1),
|
||||
// the chain server is queried for the block and the result is saved for future
|
||||
// calls, or an error is returned if the RPC is unsuccessful.
|
||||
func (c *rpcClient) BlockStamp() (wallet.BlockStamp, error) {
|
||||
func (c *rpcClient) BlockStamp() (keystore.BlockStamp, error) {
|
||||
c.mtx.Lock()
|
||||
defer c.mtx.Unlock()
|
||||
|
||||
|
@ -443,9 +444,9 @@ func (c *rpcClient) BlockStamp() (wallet.BlockStamp, error) {
|
|||
|
||||
hash, height, err := c.GetBestBlock()
|
||||
if err != nil {
|
||||
return wallet.BlockStamp{}, err
|
||||
return keystore.BlockStamp{}, err
|
||||
}
|
||||
bs := wallet.BlockStamp{
|
||||
bs := keystore.BlockStamp{
|
||||
Hash: *hash,
|
||||
Height: height,
|
||||
}
|
||||
|
@ -503,7 +504,7 @@ func (c *rpcClient) Handshake() error {
|
|||
|
||||
// Check that there was not any reorgs done since last connection.
|
||||
// If so, rollback and rescan to catch up.
|
||||
it := a.Wallet.NewIterateRecentBlocks()
|
||||
it := a.KeyStore.NewIterateRecentBlocks()
|
||||
for cont := it != nil; cont; cont = it.Prev() {
|
||||
bs := it.BlockStamp()
|
||||
log.Debugf("Checking for previous saved block with height %v hash %v",
|
||||
|
@ -530,7 +531,7 @@ func (c *rpcClient) Handshake() error {
|
|||
|
||||
// Set default account to be marked in sync with the current
|
||||
// blockstamp. This invalidates the iterator.
|
||||
a.Wallet.SetSyncedWith(bs)
|
||||
a.KeyStore.SetSyncedWith(bs)
|
||||
|
||||
// Begin tracking wallets against this btcd instance.
|
||||
AcctMgr.Track()
|
||||
|
|
48
rpcserver.go
48
rpcserver.go
|
@ -43,8 +43,8 @@ import (
|
|||
"github.com/conformal/btcrpcclient"
|
||||
"github.com/conformal/btcscript"
|
||||
"github.com/conformal/btcutil"
|
||||
"github.com/conformal/btcwallet/keystore"
|
||||
"github.com/conformal/btcwallet/txstore"
|
||||
"github.com/conformal/btcwallet/wallet"
|
||||
"github.com/conformal/btcwire"
|
||||
"github.com/conformal/btcws"
|
||||
"github.com/conformal/websocket"
|
||||
|
@ -1123,7 +1123,7 @@ func makeMultiSigScript(keys []string, nRequired int) ([]byte, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
apkinfo := ainfo.(wallet.PubKeyAddress)
|
||||
apkinfo := ainfo.(keystore.PubKeyAddress)
|
||||
|
||||
// This will be an addresspubkey
|
||||
a, err := btcutil.DecodeAddress(apkinfo.ExportPubKey(),
|
||||
|
@ -1164,7 +1164,8 @@ func AddMultiSigAddress(icmd btcjson.Cmd) (interface{}, error) {
|
|||
}
|
||||
|
||||
// TODO(oga) blockstamp current block?
|
||||
address, err := acct.ImportScript(script, &wallet.BlockStamp{})
|
||||
address, err := acct.KeyStore.ImportScript(script,
|
||||
&keystore.BlockStamp{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -1222,7 +1223,7 @@ func DumpPrivKey(icmd btcjson.Cmd) (interface{}, error) {
|
|||
}
|
||||
|
||||
key, err := AcctMgr.DumpWIFPrivateKey(addr)
|
||||
if err == wallet.ErrWalletLocked {
|
||||
if err == keystore.ErrLocked {
|
||||
// Address was found, but the private key isn't
|
||||
// accessible.
|
||||
return nil, btcjson.ErrWalletUnlockNeeded
|
||||
|
@ -1241,7 +1242,7 @@ func DumpWallet(icmd btcjson.Cmd) (interface{}, error) {
|
|||
}
|
||||
|
||||
keys, err := AcctMgr.DumpKeys()
|
||||
if err == wallet.ErrWalletLocked {
|
||||
if err == keystore.ErrLocked {
|
||||
// Address was found, but the private key isn't
|
||||
// accessible.
|
||||
return nil, btcjson.ErrWalletUnlockNeeded
|
||||
|
@ -1348,7 +1349,7 @@ func GetInfo(icmd btcjson.Cmd) (interface{}, error) {
|
|||
feeIncr = a.FeeIncrement
|
||||
}
|
||||
}
|
||||
info.WalletVersion = int32(wallet.VersCurrent.Uint32())
|
||||
info.WalletVersion = int32(keystore.VersCurrent.Uint32())
|
||||
info.Balance = balance.ToUnit(btcutil.AmountBTC)
|
||||
// Keypool times are not tracked. set to current time.
|
||||
info.KeypoolOldest = time.Now().Unix()
|
||||
|
@ -1385,7 +1386,7 @@ func GetAccount(icmd btcjson.Cmd) (interface{}, error) {
|
|||
}
|
||||
return nil, err
|
||||
}
|
||||
return acct.Name(), nil
|
||||
return acct.KeyStore.Name(), nil
|
||||
}
|
||||
|
||||
// GetAccountAddress handles a getaccountaddress by returning the most
|
||||
|
@ -1412,7 +1413,7 @@ func GetAccountAddress(icmd btcjson.Cmd) (interface{}, error) {
|
|||
|
||||
addr, err := a.CurrentAddress()
|
||||
if err != nil {
|
||||
if err == wallet.ErrWalletLocked {
|
||||
if err == keystore.ErrLocked {
|
||||
return nil, btcjson.ErrWalletKeypoolRanOut
|
||||
}
|
||||
return nil, err
|
||||
|
@ -1501,13 +1502,13 @@ func ImportPrivKey(icmd btcjson.Cmd) (interface{}, error) {
|
|||
}
|
||||
|
||||
// Import the private key, handling any errors.
|
||||
bs := wallet.BlockStamp{}
|
||||
bs := keystore.BlockStamp{}
|
||||
if _, err := a.ImportPrivateKey(wif, &bs, cmd.Rescan); err != nil {
|
||||
switch err {
|
||||
case wallet.ErrDuplicate:
|
||||
case keystore.ErrDuplicate:
|
||||
// Do not return duplicate key errors to the client.
|
||||
return nil, nil
|
||||
case wallet.ErrWalletLocked:
|
||||
case keystore.ErrLocked:
|
||||
return nil, btcjson.ErrWalletUnlockNeeded
|
||||
default:
|
||||
return nil, err
|
||||
|
@ -1527,7 +1528,7 @@ func KeypoolRefill(icmd btcjson.Cmd) (interface{}, error) {
|
|||
// NotifyNewBlockChainHeight notifies all websocket clients of a new
|
||||
// blockchain height. This sends the same notification as
|
||||
// btcd, so this can probably be removed.
|
||||
func (s *rpcServer) NotifyNewBlockChainHeight(bs *wallet.BlockStamp) {
|
||||
func (s *rpcServer) NotifyNewBlockChainHeight(bs *keystore.BlockStamp) {
|
||||
ntfn := btcws.NewBlockConnectedNtfn(bs.Hash.String(), bs.Height)
|
||||
mntfn, err := ntfn.MarshalJSON()
|
||||
// btcws notifications must always marshal without error.
|
||||
|
@ -2117,7 +2118,7 @@ func sendPairs(icmd btcjson.Cmd, account string, amounts map[string]btcutil.Amou
|
|||
switch err {
|
||||
case ErrNonPositiveAmount:
|
||||
return nil, ErrNeedPositiveAmount
|
||||
case wallet.ErrWalletLocked:
|
||||
case keystore.ErrLocked:
|
||||
return nil, btcjson.ErrWalletUnlockNeeded
|
||||
default:
|
||||
return nil, err
|
||||
|
@ -2245,13 +2246,14 @@ func handleSendRawTxReply(icmd btcjson.Cmd, txSha *btcwire.ShaHash, a *Account,
|
|||
return err
|
||||
}
|
||||
if bs, err := rpcc.BlockStamp(); err == nil {
|
||||
ltr, err := debits.ToJSON(a.Name(), bs.Height, a.Net())
|
||||
ltr, err := debits.ToJSON(a.KeyStore.Name(), bs.Height,
|
||||
a.KeyStore.Net())
|
||||
if err != nil {
|
||||
log.Errorf("Error adding sent tx history: %v", err)
|
||||
return btcjson.ErrInternal
|
||||
}
|
||||
for _, details := range ltr {
|
||||
server.NotifyNewTxDetails(a.Name(), details)
|
||||
server.NotifyNewTxDetails(a.KeyStore.Name(), details)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2342,7 +2344,7 @@ func SignMessage(icmd btcjson.Cmd) (interface{}, error) {
|
|||
return nil, btcjson.ErrInvalidAddressOrKey
|
||||
}
|
||||
|
||||
pka := ainfo.(wallet.PubKeyAddress)
|
||||
pka := ainfo.(keystore.PubKeyAddress)
|
||||
privkey, err := pka.PrivKey()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -2614,7 +2616,7 @@ func SignRawTransaction(icmd btcjson.Cmd) (interface{}, error) {
|
|||
return nil, false, err
|
||||
}
|
||||
|
||||
pka, ok := address.(wallet.PubKeyAddress)
|
||||
pka, ok := address.(keystore.PubKeyAddress)
|
||||
if !ok {
|
||||
return nil, false, errors.New("address is not " +
|
||||
"a pubkey address")
|
||||
|
@ -2644,7 +2646,7 @@ func SignRawTransaction(icmd btcjson.Cmd) (interface{}, error) {
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
sa, ok := address.(wallet.ScriptAddress)
|
||||
sa, ok := address.(keystore.ScriptAddress)
|
||||
if !ok {
|
||||
return nil, errors.New("address is not a script" +
|
||||
" address")
|
||||
|
@ -2732,7 +2734,7 @@ func ValidateAddress(icmd btcjson.Cmd) (interface{}, error) {
|
|||
if account, err := AcctMgr.AccountByAddress(addr); err == nil {
|
||||
// The address must be handled by this account, so we expect
|
||||
// this call to succeed without error.
|
||||
ainfo, err := account.Address(addr)
|
||||
ainfo, err := account.KeyStore.Address(addr)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
@ -2740,11 +2742,11 @@ func ValidateAddress(icmd btcjson.Cmd) (interface{}, error) {
|
|||
result.IsMine = true
|
||||
result.Account = account.name
|
||||
|
||||
if pka, ok := ainfo.(wallet.PubKeyAddress); ok {
|
||||
if pka, ok := ainfo.(keystore.PubKeyAddress); ok {
|
||||
result.IsCompressed = pka.Compressed()
|
||||
result.PubKey = pka.ExportPubKey()
|
||||
|
||||
} else if sa, ok := ainfo.(wallet.ScriptAddress); ok {
|
||||
} else if sa, ok := ainfo.(keystore.ScriptAddress); ok {
|
||||
result.IsScript = true
|
||||
addresses := sa.Addresses()
|
||||
addrStrings := make([]string, len(addresses))
|
||||
|
@ -2785,7 +2787,7 @@ func VerifyMessage(icmd btcjson.Cmd) (interface{}, error) {
|
|||
return nil, btcjson.ErrInvalidAddressOrKey
|
||||
}
|
||||
|
||||
pka := ainfo.(wallet.PubKeyAddress)
|
||||
pka := ainfo.(keystore.PubKeyAddress)
|
||||
privkey, err := pka.PrivKey()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -2856,7 +2858,7 @@ func WalletPassphraseChange(icmd btcjson.Cmd) (interface{}, error) {
|
|||
|
||||
err := AcctMgr.ChangePassphrase([]byte(cmd.OldPassphrase),
|
||||
[]byte(cmd.NewPassphrase))
|
||||
if err == wallet.ErrWrongPassphrase {
|
||||
if err == keystore.ErrWrongPassphrase {
|
||||
return nil, btcjson.ErrWalletPassphraseIncorrect
|
||||
}
|
||||
return nil, err
|
||||
|
|
Loading…
Reference in a new issue