From 80fadc7ec3448a8df5f363f0a979840ff7eef18e Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Mon, 21 Sep 2015 17:02:11 -0400 Subject: [PATCH] Fix bug with address summary transaction count. --- integration/regtest-node.js | 17 ++++++++++++++++ lib/services/address/index.js | 38 +++++++++++++++++------------------ 2 files changed, 36 insertions(+), 19 deletions(-) diff --git a/integration/regtest-node.js b/integration/regtest-node.js index c22ce1715..42195f527 100644 --- a/integration/regtest-node.js +++ b/integration/regtest-node.js @@ -570,6 +570,23 @@ describe('Node Functionality', function() { }); }); + it('summary for an address (sending and receiving)', function(done) { + node.services.address.getAddressSummary(address, {}, function(err, results) { + if (err) { + throw err; + } + results.totalReceived.should.equal(2000000000); + results.totalSpent.should.equal(1999990000); + results.balance.should.equal(10000); + results.unconfirmedBalance.should.equal(10000); + results.appearances.should.equal(6); + results.unconfirmedAppearances.should.equal(0); + results.txids.length.should.equal(6); + done(); + }); + }); + + it('total transaction count (sending and receiving)', function(done) { var addresses = [ address diff --git a/lib/services/address/index.js b/lib/services/address/index.js index 57902457d..4974cfb2a 100644 --- a/lib/services/address/index.js +++ b/lib/services/address/index.js @@ -906,19 +906,14 @@ AddressService.prototype.getAddressSummary = function(address, options, callback var outputs; var inputs; - var mempoolInputs; async.parallel( [ function(next) { - if(options.noTxList) { - setImmediate(next); - } else { - self.getInputs(address, opt, function(err, ins) { - inputs = ins; - next(err); - }); - } + self.getInputs(address, opt, function(err, ins) { + inputs = ins; + next(err); + }); }, function(next) { self.getOutputs(address, opt, function(err, outs) { @@ -936,8 +931,8 @@ AddressService.prototype.getAddressSummary = function(address, options, callback var totalSpent = 0; var balance = 0; var unconfirmedBalance = 0; - var appearances = 0; - var unconfirmedAppearances = 0; + var appearanceIds = {}; + var unconfirmedAppearanceIds = {}; var txids = []; for(var i = 0; i < outputs.length; i++) { @@ -951,9 +946,9 @@ AddressService.prototype.getAddressSummary = function(address, options, callback if(outputs[i].confirmations) { totalReceived += outputs[i].satoshis; balance += outputs[i].satoshis; - appearances++; + appearanceIds[outputs[i].txid] = true; } else { - unconfirmedAppearances++; + unconfirmedAppearanceIds[outputs[i].txid] = true; } if(spentDB || spentMempool) { @@ -961,23 +956,28 @@ AddressService.prototype.getAddressSummary = function(address, options, callback if(spentDB) { totalSpent += outputs[i].satoshis; balance -= outputs[i].satoshis; - appearances++; - } else { - unconfirmedAppearances++; } } } + for(var j = 0; j < inputs.length; j++) { + if (inputs[j].confirmations) { + appearanceIds[inputs[j].txid] = true; + } else { + unconfirmedAppearanceIds[outputs[j].txid] = true; + } + } + var summary = { totalReceived: totalReceived, totalSpent: totalSpent, balance: balance, unconfirmedBalance: unconfirmedBalance, - appearances: appearances, - unconfirmedAppearances: unconfirmedAppearances + appearances: Object.keys(appearanceIds).length, + unconfirmedAppearances: Object.keys(unconfirmedAppearanceIds).length }; - if(inputs) { + if(!options.noTxList) { for(var i = 0; i < inputs.length; i++) { txids.push(inputs[i]); }