Merge pull request #650 from isocolsky/feat/low-fees
Tag only unconfirmed txs with low fee
This commit is contained in:
commit
cb3ee35deb
|
@ -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) {
|
self.getWallet({}, function(err, wallet) {
|
||||||
if (err) return cb(err);
|
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);
|
var finalTxs = decorate(wallet, res.txs.items, addresses, res.txps, res.notes);
|
||||||
|
|
||||||
self.getFeeLevels({
|
tagLowFees(wallet, finalTxs, function(err) {
|
||||||
network: wallet.network
|
if (err)
|
||||||
}, function(err, levels) {
|
log.warn('Failed to tag unconfirmed with low fee');
|
||||||
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;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (res.txs.fromCache)
|
if (res.txs.fromCache)
|
||||||
log.debug("History from cache for:", self.walletId, from, to);
|
log.debug("History from cache for:", self.walletId, from, to);
|
||||||
|
|
|
@ -6305,14 +6305,14 @@ describe('Wallet service', function() {
|
||||||
done();
|
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({
|
helpers.stubFeeLevels({
|
||||||
24: 10000,
|
24: 10000,
|
||||||
});
|
});
|
||||||
server._normalizeTxHistory = sinon.stub().returnsArg(0);
|
server._normalizeTxHistory = sinon.stub().returnsArg(0);
|
||||||
var txs = [{
|
var txs = [{
|
||||||
txid: '1',
|
txid: '1',
|
||||||
confirmations: 1,
|
confirmations: 0,
|
||||||
fees: 100,
|
fees: 100,
|
||||||
time: 20,
|
time: 20,
|
||||||
inputs: [{
|
inputs: [{
|
||||||
|
@ -6326,7 +6326,7 @@ describe('Wallet service', function() {
|
||||||
size: 500,
|
size: 500,
|
||||||
}, {
|
}, {
|
||||||
txid: '2',
|
txid: '2',
|
||||||
confirmations: 1,
|
confirmations: 0,
|
||||||
fees: 6000,
|
fees: 6000,
|
||||||
time: 20,
|
time: 20,
|
||||||
inputs: [{
|
inputs: [{
|
||||||
|
@ -6338,6 +6338,20 @@ describe('Wallet service', function() {
|
||||||
amount: 200,
|
amount: 200,
|
||||||
}],
|
}],
|
||||||
size: 500,
|
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);
|
helpers.stubHistory(txs);
|
||||||
server.getTxHistory({}, function(err, txs) {
|
server.getTxHistory({}, function(err, txs) {
|
||||||
|
@ -6345,9 +6359,12 @@ describe('Wallet service', function() {
|
||||||
var tx = txs[0];
|
var tx = txs[0];
|
||||||
tx.feePerKb.should.equal(200);
|
tx.feePerKb.should.equal(200);
|
||||||
tx.lowFees.should.be.true;
|
tx.lowFees.should.be.true;
|
||||||
var tx = txs[1];
|
tx = txs[1];
|
||||||
tx.feePerKb.should.equal(12000);
|
tx.feePerKb.should.equal(12000);
|
||||||
tx.lowFees.should.be.false;
|
tx.lowFees.should.be.false;
|
||||||
|
tx = txs[2];
|
||||||
|
tx.feePerKb.should.equal(200);
|
||||||
|
should.not.exist(tx.lowFees);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue