add getMainAddress

This commit is contained in:
Matias Alejo Garcia 2015-02-22 13:04:23 -03:00
parent 851f4bd544
commit bd9977a43e
7 changed files with 82 additions and 13 deletions

View File

@ -2,7 +2,7 @@
var _ = require('lodash');
var program = require('commander');
var utils = require('./cli-utils');
var utils = require('./cli-utils');
var Client = require('../lib/client');
program = utils.configureCommander(program);
@ -11,11 +11,13 @@ program
var args = program.args;
var client = utils.getClient(program);
client.getAddresses(function(err, x) {
client.getMainAddresses({
doNotVerify: true
}, function(err, x) {
utils.die(err);
console.log('* Addresses:');
_.each(x, function(a){
_.each(x, function(a) {
console.log(' ', a.address);
});
});

View File

@ -389,6 +389,32 @@ API.prototype.createAddress = function(cb) {
});
};
/*
* opts.doNotVerify
*/
API.prototype.getMainAddresses = function(opts, cb) {
var self = this;
this._loadAndCheck(function(err, data) {
if (err) return cb(err);
var url = '/v1/addresses/';
self._doGetRequest(url, data, function(err, addresses) {
if (err) return cb(err);
if (!opts.doNotVerify) {
var fake = _.any(addresses, function(address) {
return !Verifier.checkAddress(data, address);
});
if (fake)
return cb(new ServerCompromisedError('Server sent fake address'));
}
return cb(null, addresses);
});
});
};
API.prototype.history = function(limit, cb) {
};

View File

@ -203,7 +203,7 @@ ExpressApp.start = function(opts) {
router.get('/v1/addresses/', function(req, res) {
getServerWithAuth(req, res, function(server) {
server.getAddresses({}, function(err, addresses) {
server.getMainAddresses({}, function(err, addresses) {
if (err) return returnError(err, res, req);
res.json(addresses);
});

View File

@ -97,10 +97,11 @@ HDPath.indexesForPath = function(path) {
preconditions.checkArgument(_.isString(path));
var s = path.split('/');
var l = s.length;
return {
isChange: s[3] === '1',
addressIndex: parseInt(s[4], 10),
copayerIndex: parseInt(s[2], 10)
isChange: s[l - 2] === '1',
addressIndex: parseInt(s[l - 1], 10),
copayerIndex: parseInt(s[l - 3], 10)
};
};

View File

@ -17,6 +17,7 @@ var Explorers = require('bitcore-explorers');
var ClientError = require('./clienterror');
var Utils = require('./utils');
var Storage = require('./storage');
var HDPath = require('./hdpath');
var WalletUtils = require('./walletutils');
var Wallet = require('./model/wallet');
@ -284,13 +285,16 @@ WalletService.prototype.createAddress = function(opts, cb) {
* @param {Object} opts
* @returns {Address[]}
*/
WalletService.prototype.getAddresses = function(opts, cb) {
WalletService.prototype.getMainAddresses = function(opts, cb) {
var self = this;
self.storage.fetchAddresses(self.walletId, function(err, addresses) {
if (err) return cb(err);
var mainAddresses = _.filter(addresses, function(x) {
return !HDPath.indexesForPath(x.path).isChange;
});
return cb(null, addresses);
return cb(null, mainAddresses);
});
};
@ -520,7 +524,7 @@ WalletService.prototype.createTx = function(opts, cb) {
try {
self._selectUtxos(txp, utxos);
} catch (ex) {
console.log('[server.js.523:ex:]',ex); //TODO
console.log('[server.js.523:ex:]', ex); //TODO
return cb(new ClientError(ex));
}

View File

@ -858,8 +858,44 @@ describe('client API ', function() {
});
});
});
it('Should return only main addresses (case 1)', function(done) {
helpers.createAndJoinWallet(clients, 1, 1, function(err, w) {
should.not.exist(err);
clients[0].createAddress(function(err, x0) {
should.not.exist(err);
blockExplorerMock.setUtxo(x0, 1, 1);
var opts = {
amount: 10000000,
toAddress: 'n2TBMPzPECGUfcT2EByiTJ12TPZkhN2mN5',
message: 'hello 1-1',
};
clients[0].sendTxProposal(opts, function(err, x) {
should.not.exist(err);
clients[0].getMainAddresses({}, function(err, addr) {
should.not.exist(err);
addr.length.should.equal(1);
done();
});
});
});
});
});
it('Should return only main addresses (case 2)', function(done) {
helpers.createAndJoinWallet(clients, 1, 1, function(err, w) {
should.not.exist(err);
clients[0].createAddress(function(err, x0) {
should.not.exist(err);
clients[0].createAddress(function(err, x0) {
should.not.exist(err);
clients[0].getMainAddresses({doNotVerify: true}, function(err, addr) {
should.not.exist(err);
addr.length.should.equal(2);
done();
});
});
});
});
});
});
describe('Transactions Signatures and Rejection', function() {

View File

@ -560,7 +560,7 @@ describe('Copay server', function() {
err.should.exist;
should.not.exist(address);
server.getAddresses({}, function(err, addresses) {
server.getMainAddresses({}, function(err, addresses) {
addresses.length.should.equal(0);
server.storage.storeAddressAndWallet.restore();