From 84a04b33e5190e66fd8080fb7c43748614bcb692 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Sat, 11 Jun 2016 23:14:55 -0700 Subject: [PATCH] fees refactor. --- lib/bcoin/fees.js | 55 +++++++++++++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 19 deletions(-) diff --git a/lib/bcoin/fees.js b/lib/bcoin/fees.js index ec9d38a9..61465978 100644 --- a/lib/bcoin/fees.js +++ b/lib/bcoin/fees.js @@ -433,7 +433,7 @@ PolicyEstimator.prototype.processTX = function processTX(entry, current) { blockHeight: height, bucketIndex: this.feeStats.addTX(height, rate) }; - bcoin.debug('estimatefee: Rate: %d.', this.estimateFee(1, true)); + bcoin.debug('estimatefee: Rate: %d.', this.estimateFee()); } else { bcoin.debug('estimatefee: Not adding ts %s.', hash); } @@ -477,7 +477,7 @@ PolicyEstimator.prototype.processBlockTX = function processBlockTX(height, entry */ PolicyEstimator.prototype.processBlock = function processBlock(height, entries, current) { - var i, median; + var i; // Ignore reorgs. if (height <= this.bestHeight) @@ -494,6 +494,20 @@ PolicyEstimator.prototype.processBlock = function processBlock(height, entries, bcoin.debug('estimatefee: Recalculating dynamic cutoffs.'); + this.feeLikely = this.feeStats.estimateMedian( + 2, SUFFICIENT_FEETXS, MIN_SUCCESS_PCT, + true, height); + + if (this.feeLikely === -1) + this.feeLikely = INF_FEERATE; + + this.feeUnlikely = this.feeStats.estimateMedian( + 10, SUFFICIENT_FEETXS, UNLIKELY_PCT, + false, height); + + if (this.feeUnlikely === -1) + this.feeUnlikely = 0; + this.priLikely = this.priStats.estimateMedian( 2, SUFFICIENT_PRITXS, MIN_SUCCESS_PCT, true, height); @@ -501,12 +515,6 @@ PolicyEstimator.prototype.processBlock = function processBlock(height, entries, if (this.priLikely === -1) this.priLikely = INF_PRIORITY; - median = this.feeStats.estimateMedian( - 2, SUFFICIENT_FEETXS, MIN_SUCCESS_PCT, - true, height); - - this.feeLikely = median === -1 ? INF_FEERATE : median; - this.priUnlikely = this.priStats.estimateMedian( 10, SUFFICIENT_PRITXS, UNLIKELY_PCT, false, height); @@ -514,12 +522,6 @@ PolicyEstimator.prototype.processBlock = function processBlock(height, entries, if (this.priUnlikely === -1) this.priUnlikely = 0; - median = this.feeStats.estimateMedian( - 10, SUFFICIENT_FEETXS, UNLIKELY_PCT, - false, height); - - this.feeUnlikely = median === -1 ? 0 : median; - this.feeStats.clearCurrent(height); this.priStats.clearCurrent(height); @@ -537,14 +539,20 @@ PolicyEstimator.prototype.processBlock = function processBlock(height, entries, /** * Estimate a fee rate. * @param {Number} target - Confirmation target. - * @param {Boolean?} smart - Smart estimation. + * @param {Boolean} [smart=true] - Smart estimation. * @returns {Rate} */ PolicyEstimator.prototype.estimateFee = function estimateFee(target, smart) { var rate, minPoolFee; - if (target <= 0 || target > this.feeStats.maxConfirms) + if (!target) + target = 1; + + if (smart == null) + smart = true; + + if (!(target > 0) || target > this.feeStats.maxConfirms) return 0; if (!smart) { @@ -580,15 +588,21 @@ PolicyEstimator.prototype.estimateFee = function estimateFee(target, smart) { /** * Estimate a priority. * @param {Number} target - Confirmation target. - * @param {Boolean?} smart - Smart estimation. + * @param {Boolean} [smart=true] - Smart estimation. * @returns {Number} */ PolicyEstimator.prototype.estimatePriority = function estimatePriority(target, smart) { var minPoolFee, priority; - if (target <= 0 || target > this.priStats.maxConfirms) - return -1; + if (!target) + target = 1; + + if (smart == null) + smart = true; + + if (!(target > 0) || target > this.priStats.maxConfirms) + return 0; if (!smart) { priority = this.priStats.estimateMedian( @@ -610,6 +624,9 @@ PolicyEstimator.prototype.estimatePriority = function estimatePriority(target, s target -= 1; + if (priority < 0) + return 0; + return priority; };