From bbb6890fd577dc0e77a386bea6f6b4d87afc4100 Mon Sep 17 00:00:00 2001 From: Ivan Socolsky Date: Thu, 13 Apr 2017 12:50:00 -0300 Subject: [PATCH] only tag unconfirmed txs --- lib/server.js | 49 ++++++++++++++++++++++++-------------- test/integration/server.js | 25 +++++++++++++++---- 2 files changed, 52 insertions(+), 22 deletions(-) diff --git a/lib/server.js b/lib/server.js index 207a036..e227447 100644 --- a/lib/server.js +++ b/lib/server.js @@ -2864,6 +2864,34 @@ WalletService.prototype.getTxHistory = function(opts, cb) { }); }; + function tagLowFees(wallet, txs, cb) { + var unconfirmed = _.filter(txs, { + confirmations: 0 + }); + if (_.isEmpty(unconfirmed)) return cb(); + + self.getFeeLevels({ + network: wallet.network + }, function(err, levels) { + if (err) { + log.warn('Could not fetch fee levels', err); + } else { + var level = _.find(levels, { + level: 'superEconomy' + }); + if (!level || !level.nbBlocks) { + log.debug('Cannot compute super economy fee level from blockchain'); + } else { + var minFeePerKb = level.feePerKb; + _.each(unconfirmed, function(tx) { + tx.lowFees = tx.feePerKb < minFeePerKb; + }); + } + } + return cb(); + }); + }; + self.getWallet({}, function(err, wallet) { if (err) return cb(err); @@ -2912,24 +2940,9 @@ WalletService.prototype.getTxHistory = function(opts, cb) { var finalTxs = decorate(wallet, res.txs.items, addresses, res.txps, res.notes); - self.getFeeLevels({ - network: wallet.network - }, function(err, levels) { - if (err) { - log.warn('Could not fetch fee levels', err); - } else { - var level = _.find(levels, { - level: 'superEconomy' - }); - if (!level || !level.nbBlocks) { - log.debug('Cannot compute super economy fee level from blockchain'); - } else { - var minFeePerKb = level.feePerKb; - _.each(finalTxs, function(tx) { - tx.lowFees = tx.feePerKb < minFeePerKb; - }); - } - } + tagLowFees(wallet, finalTxs, function(err) { + if (err) + log.warn('Failed to tag unconfirmed with low fee'); if (res.txs.fromCache) log.debug("History from cache for:", self.walletId, from, to); diff --git a/test/integration/server.js b/test/integration/server.js index 110dbf0..1f639b1 100644 --- a/test/integration/server.js +++ b/test/integration/server.js @@ -6305,14 +6305,14 @@ describe('Wallet service', function() { done(); }); }); - it('should set lowFees atribute for sub-superEconomy level fees', function(done) { + it('should set lowFees atribute for sub-superEconomy level fees on unconfirmed txs', function(done) { helpers.stubFeeLevels({ 24: 10000, }); server._normalizeTxHistory = sinon.stub().returnsArg(0); var txs = [{ txid: '1', - confirmations: 1, + confirmations: 0, fees: 100, time: 20, inputs: [{ @@ -6326,7 +6326,7 @@ describe('Wallet service', function() { size: 500, }, { txid: '2', - confirmations: 1, + confirmations: 0, fees: 6000, time: 20, inputs: [{ @@ -6338,6 +6338,20 @@ describe('Wallet service', function() { amount: 200, }], size: 500, + }, { + txid: '3', + confirmations: 6, + fees: 100, + time: 20, + inputs: [{ + address: 'external', + amount: 500, + }], + outputs: [{ + address: mainAddresses[0].address, + amount: 200, + }], + size: 500, }]; helpers.stubHistory(txs); server.getTxHistory({}, function(err, txs) { @@ -6345,9 +6359,12 @@ describe('Wallet service', function() { var tx = txs[0]; tx.feePerKb.should.equal(200); tx.lowFees.should.be.true; - var tx = txs[1]; + tx = txs[1]; tx.feePerKb.should.equal(12000); tx.lowFees.should.be.false; + tx = txs[2]; + tx.feePerKb.should.equal(200); + should.not.exist(tx.lowFees); done(); }); });