wallet: fix account handling.

This commit is contained in:
Christopher Jeffrey 2016-08-26 18:24:26 -07:00
parent 872560eeb9
commit eabba6e72e
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD
5 changed files with 125 additions and 52 deletions

93
bin/cli
View File

@ -103,6 +103,17 @@ CLI.prototype.createAccount = function createAccount(callback) {
});
};
CLI.prototype.createAddress = function createAddress(callback) {
var self = this;
var account = this.argv[0];
this.wallet.createAddress(account, function(err, account) {
if (err)
return callback(err);
self.log(account);
callback();
});
};
CLI.prototype.getAccounts = function getAccounts(callback) {
var self = this;
this.wallet.getAccounts(function(err, accounts) {
@ -362,6 +373,16 @@ CLI.prototype.getDetails = function getDetails(callback) {
});
};
CLI.prototype.retoken = function retoken(callback) {
var self = this;
this.wallet.retoken(function(err, result) {
if (err)
return callback(err);
self.log(result);
callback();
});
};
CLI.prototype.rpc = function rpc(callback) {
var self = this;
var method = this.argv.shift();
@ -418,13 +439,21 @@ CLI.prototype.handleWallet = function handleWallet(callback) {
case 'history':
return self.getWalletHistory(callback);
case 'account':
if (self.argv[0] === 'list') {
self.argv.shift();
return self.getAccounts(callback);
}
if (self.argv[0] === 'create') {
self.argv.shift();
return self.createAccount(callback);
}
if (self.argv[0] === 'get')
self.argv.shift();
return self.getAccount(callback);
case 'accounts':
return self.getAccounts(callback);
case 'address':
return self.createAddress(callback);
case 'retoken':
return self.retoken(callback);
case 'sign':
return self.signTX(callback);
case 'mktx':
@ -440,30 +469,26 @@ CLI.prototype.handleWallet = function handleWallet(callback) {
default:
self.log('Unrecognized command.');
self.log('Commands:');
self.log(' $ wallet [id] --keys [hdkeys]'
+ ' --type [pubkeyhash/multisig] -m [m-value]'
+ ' -n [n-value] --witness: View or create wallet by ID.');
self.log(' $ listen [id]: Listen for wallet events.');
self.log(' $ getwallet [id]: View wallet by ID.');
self.log(' $ addkey [id] --keys [hdkeys]: Add keys to wallet.');
self.log(' $ rmkey [id] --keys [hdkeys]: Remove keys from wallet.');
self.log(' $ balance [id]: Get wallet balance.');
self.log(' $ history [id]: View wallet TX history.');
self.log(' $ accounts [id]: List account names.');
self.log(' $ account [id] [acct]: Get account details.');
self.log(' $ send [id] [address] [value] --script [code]: Send transaction.');
self.log(' $ create [id] [address] [value] --script [code]: Create transaction.');
self.log(' $ sign [id] [tx-hex]: Sign transaction.');
self.log(' $ zap [id] --age [age]: Zap pending wallet TXs.');
self.log(' $ broadcast [tx-hex]: Broadcast transaction.');
self.log(' $ view [tx-hex]: View transaction.');
self.log(' $ mempool: Get mempool snapshot.');
self.log(' $ tx [hash/address]: View transactions.');
self.log(' $ coin [hash+index/address]: View coins.');
self.log(' $ block [hash/height]: View block.');
self.log(' $ listen: Listen for events.');
self.log(' $ get: View wallet.');
self.log(' $ addkey [xpubkey]: Add key to wallet.');
self.log(' $ rmkey [xpubkey]: Remove key from wallet.');
self.log(' $ balance: Get wallet balance.');
self.log(' $ history: View wallet TX history.');
self.log(' $ account list: List account names.');
self.log(' $ account create [account-name]: Create account.');
self.log(' $ account get [account-name]: Get account details.');
self.log(' $ address: Derive new address.');
self.log(' $ retoken: Create new api key.');
self.log(' $ send [address] [value]: Send transaction.');
self.log(' $ mktx [address] [value]: Create transaction.');
self.log(' $ sign [tx-hex]: Sign transaction.');
self.log(' $ zap --age [age]: Zap pending wallet TXs.');
self.log(' $ tx [hash]: View transaction details.');
self.log(' $ view [tx-hex]: Parse and view transaction.');
self.log('Other Options:');
self.log(' --passphrase [passphrase]: For signing and account creation.');
self.log(' --account [acctname]: Account name.');
self.log(' --account [account-name]: Account name.');
return callback();
}
});
@ -500,30 +525,12 @@ CLI.prototype.handleNode = function handleNode(callback) {
default:
self.log('Unrecognized command.');
self.log('Commands:');
self.log(' $ wallet [id] --keys [hdkeys]'
+ ' --type [pubkeyhash/multisig] -m [m-value]'
+ ' -n [n-value] --witness: View or create wallet by ID.');
self.log(' $ listen [id]: Listen for wallet events.');
self.log(' $ getwallet [id]: View wallet by ID.');
self.log(' $ addkey [id] --keys [hdkeys]: Add keys to wallet.');
self.log(' $ rmkey [id] --keys [hdkeys]: Remove keys from wallet.');
self.log(' $ balance [id]: Get wallet balance.');
self.log(' $ history [id]: View wallet TX history.');
self.log(' $ accounts [id]: List account names.');
self.log(' $ account [id] [acct]: Get account details.');
self.log(' $ send [id] [address] [value] --script [code]: Send transaction.');
self.log(' $ create [id] [address] [value] --script [code]: Create transaction.');
self.log(' $ sign [id] [tx-hex]: Sign transaction.');
self.log(' $ zap [id] --age [age]: Zap pending wallet TXs.');
self.log(' $ wallet create [id]: Create wallet.');
self.log(' $ broadcast [tx-hex]: Broadcast transaction.');
self.log(' $ view [tx-hex]: View transaction.');
self.log(' $ mempool: Get mempool snapshot.');
self.log(' $ tx [hash/address]: View transactions.');
self.log(' $ coin [hash+index/address]: View coins.');
self.log(' $ block [hash/height]: View block.');
self.log('Other Options:');
self.log(' --passphrase [passphrase]: For signing and account creation.');
self.log(' --account [acctname]: Account name.');
return callback();
}
});

View File

@ -617,7 +617,14 @@ HTTPClient.prototype.send = function send(id, options, callback) {
*/
HTTPClient.prototype.retoken = function retoken(id, passphrase, callback) {
var options = { passphrase: passphrase };
var options;
if (typeof passphrase === 'function') {
callback = passphrase;
passphrase = null;
}
options = { passphrase: passphrase };
this._post('/wallet/' + id + '/retoken', options, function(err, body) {
if (err)
@ -823,6 +830,32 @@ HTTPClient.prototype.createAccount = function createAccount(id, options, callbac
this._post(path, options, callback);
};
/**
* Create address.
* @param {WalletID} id
* @param {Object} options
* @param {Function} callback - Returns [Error, Array].
*/
HTTPClient.prototype.createAddress = function createAddress(id, options, callback) {
var path;
if (typeof options === 'function') {
callback = options;
options = null;
}
if (!options)
options = {};
if (typeof options === 'string')
options = { account: options };
path = '/wallet/' + id + '/address';
this._post(path, options, callback);
};
/*
* Helpers
*/

View File

@ -287,6 +287,14 @@ HTTPWallet.prototype.createAccount = function createAccount(options, callback) {
this.client.createAccount(this.id, options, callback);
};
/**
* @see Wallet#createAddress
*/
HTTPWallet.prototype.createAddress = function createAddress(account, callback) {
this.client.createAddress(this.id, account, callback);
};
/**
* @see Wallet#setPassphrase
*/
@ -301,6 +309,12 @@ HTTPWallet.prototype.setPassphrase = function setPassphrase(old, new_, callback)
HTTPWallet.prototype.retoken = function retoken(passphrase, callback) {
var self = this;
if (typeof passphrase === 'function') {
callback = passphrase;
passphrase = null;
}
this.client.retoken(this.id, passphrase, function(err, token) {
if (err)
return callback(err);

View File

@ -259,9 +259,12 @@ Wallet.prototype.addKey = function addKey(account, key, callback) {
if (typeof key === 'function') {
callback = key;
key = account;
account = 0;
account = null;
}
if (account == null)
account = 0;
callback = this._lockWrite(addKey, [account, key, callback]);
if (!callback)
@ -303,9 +306,12 @@ Wallet.prototype.removeKey = function removeKey(account, key, callback) {
if (typeof key === 'function') {
callback = key;
key = account;
account = 0;
account = null;
}
if (account == null)
account = 0;
callback = this._lockWrite(removeKey, [account, key, callback]);
if (!callback)
@ -489,6 +495,7 @@ Wallet.prototype.createAccount = function createAccount(options, callback) {
var self = this;
var passphrase = options.passphrase;
var timeout = options.timeout;
var name = options.name;
var key;
callback = this._lockWrite(createAccount, [options, callback]);
@ -496,6 +503,12 @@ Wallet.prototype.createAccount = function createAccount(options, callback) {
if (!callback)
return;
if (typeof options.account === 'string')
name = options.account;
if (!name)
name = self.accountDepth + '';
this.unlock(passphrase, timeout, function(err, master) {
if (err)
return callback(err);
@ -506,7 +519,7 @@ Wallet.prototype.createAccount = function createAccount(options, callback) {
network: self.network,
wid: self.wid,
id: self.id,
name: self.accountDepth === 0 ? 'default' : options.name,
name: self.accountDepth === 0 ? 'default' : name,
witness: options.witness,
accountKey: key.hdPublicKey,
accountIndex: self.accountDepth,
@ -624,7 +637,7 @@ Wallet.prototype.hasAccount = function hasAccount(account, callback) {
Wallet.prototype.createReceive = function createReceive(account, callback) {
if (typeof account === 'function') {
callback = account;
account = 0;
account = null;
}
return this.createAddress(account, false, callback);
};
@ -638,7 +651,7 @@ Wallet.prototype.createReceive = function createReceive(account, callback) {
Wallet.prototype.createChange = function createChange(account, callback) {
if (typeof account === 'function') {
callback = account;
account = 0;
account = null;
}
return this.createAddress(account, true, callback);
};
@ -656,9 +669,12 @@ Wallet.prototype.createAddress = function createAddress(account, change, callbac
if (typeof change === 'function') {
callback = change;
change = account;
account = 0;
account = null;
}
if (account == null)
account = 0;
callback = this._lockWrite(createAddress, [account, change, callback]);
if (!callback)
@ -813,9 +829,12 @@ Wallet.prototype.importKey = function importKey(account, ring, passphrase, callb
if (typeof ring === 'function') {
callback = ring;
ring = account;
account = 0;
account = null;
}
if (account == null)
account = 0;
callback = this._lockWrite(importKey, [account, ring, passphrase, callback]);
if (!callback)

View File

@ -836,7 +836,7 @@ WalletDB.prototype.createAccount = function createAccount(options, callback) {
var self = this;
var account;
this.hasAccount(options.wid, options.accountIndex, function(err, exists) {
this.hasAccount(options.wid, options.name, function(err, exists) {
if (err)
return callback(err);