Merge pull request #251 from braydonf/bug/tx-count

Fix bug with address summary transaction count.
This commit is contained in:
Chris Kleeschulte 2015-09-22 14:14:17 -04:00
commit fa59000819
2 changed files with 36 additions and 19 deletions

View File

@ -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) { it('total transaction count (sending and receiving)', function(done) {
var addresses = [ var addresses = [
address address

View File

@ -906,19 +906,14 @@ AddressService.prototype.getAddressSummary = function(address, options, callback
var outputs; var outputs;
var inputs; var inputs;
var mempoolInputs;
async.parallel( async.parallel(
[ [
function(next) { function(next) {
if(options.noTxList) { self.getInputs(address, opt, function(err, ins) {
setImmediate(next); inputs = ins;
} else { next(err);
self.getInputs(address, opt, function(err, ins) { });
inputs = ins;
next(err);
});
}
}, },
function(next) { function(next) {
self.getOutputs(address, opt, function(err, outs) { self.getOutputs(address, opt, function(err, outs) {
@ -936,8 +931,8 @@ AddressService.prototype.getAddressSummary = function(address, options, callback
var totalSpent = 0; var totalSpent = 0;
var balance = 0; var balance = 0;
var unconfirmedBalance = 0; var unconfirmedBalance = 0;
var appearances = 0; var appearanceIds = {};
var unconfirmedAppearances = 0; var unconfirmedAppearanceIds = {};
var txids = []; var txids = [];
for(var i = 0; i < outputs.length; i++) { for(var i = 0; i < outputs.length; i++) {
@ -951,9 +946,9 @@ AddressService.prototype.getAddressSummary = function(address, options, callback
if(outputs[i].confirmations) { if(outputs[i].confirmations) {
totalReceived += outputs[i].satoshis; totalReceived += outputs[i].satoshis;
balance += outputs[i].satoshis; balance += outputs[i].satoshis;
appearances++; appearanceIds[outputs[i].txid] = true;
} else { } else {
unconfirmedAppearances++; unconfirmedAppearanceIds[outputs[i].txid] = true;
} }
if(spentDB || spentMempool) { if(spentDB || spentMempool) {
@ -961,23 +956,28 @@ AddressService.prototype.getAddressSummary = function(address, options, callback
if(spentDB) { if(spentDB) {
totalSpent += outputs[i].satoshis; totalSpent += outputs[i].satoshis;
balance -= 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 = { var summary = {
totalReceived: totalReceived, totalReceived: totalReceived,
totalSpent: totalSpent, totalSpent: totalSpent,
balance: balance, balance: balance,
unconfirmedBalance: unconfirmedBalance, unconfirmedBalance: unconfirmedBalance,
appearances: appearances, appearances: Object.keys(appearanceIds).length,
unconfirmedAppearances: unconfirmedAppearances unconfirmedAppearances: Object.keys(unconfirmedAppearanceIds).length
}; };
if(inputs) { if(!options.noTxList) {
for(var i = 0; i < inputs.length; i++) { for(var i = 0; i < inputs.length; i++) {
txids.push(inputs[i]); txids.push(inputs[i]);
} }