Merge pull request #650 from isocolsky/feat/low-fees

Tag only unconfirmed txs with low fee
This commit is contained in:
Matias Alejo Garcia 2017-04-14 19:25:00 +02:00 committed by GitHub
commit cb3ee35deb
2 changed files with 52 additions and 22 deletions

View File

@ -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);

View File

@ -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();
});
});