From 75c8e28e7397c95e982a08a015def10a1dcba286 Mon Sep 17 00:00:00 2001 From: Ivan Socolsky Date: Mon, 16 Jan 2017 14:14:28 -0300 Subject: [PATCH] treat single address in output as change --- lib/server.js | 89 ++++++++++++++++++++------------------ test/integration/server.js | 65 ++++++++++++++-------------- 2 files changed, 79 insertions(+), 75 deletions(-) diff --git a/lib/server.js b/lib/server.js index 214318d..79c7a02 100644 --- a/lib/server.js +++ b/lib/server.js @@ -2660,8 +2660,7 @@ WalletService.prototype.getTxHistory = function(opts, cb) { if (opts.limit > Defaults.HISTORY_LIMIT) return cb(Errors.HISTORY_LIMIT_EXCEEDED); - function decorate(txs, addresses, proposals, notes) { - + function decorate(wallet, txs, addresses, proposals, notes) { var indexedAddresses = _.indexBy(addresses, 'address'); var indexedProposals = _.indexBy(proposals, 'txid'); var indexedNotes = _.indexBy(notes, 'txid'); @@ -2680,7 +2679,7 @@ WalletService.prototype.getTxHistory = function(opts, cb) { address: item.address, amount: item.amount, isMine: !!address, - isChange: address ? address.isChange : false, + isChange: address ? (address.isChange || wallet.singleAddress) : false, } }); }; @@ -2858,55 +2857,59 @@ WalletService.prototype.getTxHistory = function(opts, cb) { }); }; - // Get addresses for this wallet - self.storage.fetchAddresses(self.walletId, function(err, addresses) { + self.getWallet({}, function(err, wallet) { if (err) return cb(err); - if (addresses.length == 0) return cb(null, []); - var from = opts.skip || 0; - var to = from + opts.limit; + // Get addresses for this wallet + self.storage.fetchAddresses(self.walletId, function(err, addresses) { + if (err) return cb(err); + if (addresses.length == 0) return cb(null, []); + + var from = opts.skip || 0; + var to = from + opts.limit; - async.waterfall([ + async.waterfall([ - function(next) { - getNormalizedTxs(addresses, from, to, next); - }, - function(txs, next) { - // Fetch all proposals in [t - 7 days, t + 1 day] - var minTs = _.min(txs.items, 'time').time - 7 * 24 * 3600; - var maxTs = _.max(txs.items, 'time').time + 1 * 24 * 3600; - - async.parallel([ - - function(done) { - self.storage.fetchTxs(self.walletId, { - minTs: minTs, - maxTs: maxTs - }, done); - }, - function(done) { - self.storage.fetchTxNotes(self.walletId, { - minTs: minTs - }, done); - }, - ], function(err, res) { - return next(err, { - txs: txs, - txps: res[0], - notes: res[1] + function(next) { + getNormalizedTxs(addresses, from, to, next); + }, + function(txs, next) { + // Fetch all proposals in [t - 7 days, t + 1 day] + var minTs = _.min(txs.items, 'time').time - 7 * 24 * 3600; + var maxTs = _.max(txs.items, 'time').time + 1 * 24 * 3600; + + async.parallel([ + + function(done) { + self.storage.fetchTxs(self.walletId, { + minTs: minTs, + maxTs: maxTs + }, done); + }, + function(done) { + self.storage.fetchTxNotes(self.walletId, { + minTs: minTs + }, done); + }, + ], function(err, res) { + return next(err, { + txs: txs, + txps: res[0], + notes: res[1] + }); }); - }); - }, - ], function(err, res) { - if (err) return cb(err); + }, + ], function(err, res) { + if (err) return cb(err); - var finalTxs = decorate(res.txs.items, addresses, res.txps, res.notes); + var finalTxs = decorate(wallet, res.txs.items, addresses, res.txps, res.notes); - if (res.txs.fromCache) - log.debug("History from cache for:", self.walletId, from, to); + if (res.txs.fromCache) + log.debug("History from cache for:", self.walletId, from, to); - return cb(null, finalTxs, !!res.txs.fromCache); + return cb(null, finalTxs, !!res.txs.fromCache); + }); }); }); }; diff --git a/test/integration/server.js b/test/integration/server.js index 15b7ab0..7280929 100644 --- a/test/integration/server.js +++ b/test/integration/server.js @@ -4245,41 +4245,42 @@ describe('Wallet service', function() { }); }); }); - it.only('should correctly handle change in tx history', function(done) { + it('should correctly handle change in tx history', function(done) { server._normalizeTxHistory = sinon.stub().returnsArg(0); - var txs = [{ - txid: '1', - confirmations: 1, - fees: 150, - time: Date.now() / 1000, - inputs: [{ - address: firstAddress, - amount: 550, - }], - outputs: [{ - address: firstAddress, - amount: 100, - }, { - address: 'external', - amount: 300, - }], - }]; - helpers.stubHistory(txs); - server.getTxHistory({}, function(err, txs) { - should.not.exist(err); - should.exist(txs); - txs.length.should.equal(1); - var tx = txs[0]; - tx.action.should.equal('sent'); - tx.amount.should.equal(300); - tx.fees.should.equal(150); - tx.outputs.length.should.equal(1); - tx.outputs[0].address.should.equal('external'); - tx.outputs[0].amount.should.equal(300); - done(); + helpers.stubUtxos(server, wallet, 2, function() { + var txs = [{ + txid: '1', + confirmations: 1, + fees: 150, + time: Date.now() / 1000, + inputs: [{ + address: firstAddress.address, + amount: 550, + }], + outputs: [{ + address: firstAddress.address, + amount: 100, + }, { + address: 'external', + amount: 300, + }], + }]; + helpers.stubHistory(txs); + server.getTxHistory({}, function(err, txs) { + should.not.exist(err); + should.exist(txs); + txs.length.should.equal(1); + var tx = txs[0]; + tx.action.should.equal('sent'); + tx.amount.should.equal(300); + tx.fees.should.equal(150); + tx.outputs.length.should.equal(1); + tx.outputs[0].address.should.equal('external'); + tx.outputs[0].amount.should.equal(300); + done(); + }); }); }); - });