aboutsummaryrefslogtreecommitdiff
path: root/src/policy/fees.cpp
diff options
context:
space:
mode:
authorAlex Morcos <morcos@chaincode.com>2015-11-16 15:21:51 -0500
committerAlex Morcos <morcos@chaincode.com>2015-11-16 15:33:06 -0500
commit63030514701828a06040413837f5eced9deeee03 (patch)
tree62be88c1ff41a297a3e1b58ff5ccd68789cb699c /src/policy/fees.cpp
parentf22ac4a22c570921f1c2be121e6744a1564b2ce7 (diff)
downloadbitcoin-63030514701828a06040413837f5eced9deeee03.tar.xz
EstimateSmart functions consider mempool min fee
Diffstat (limited to 'src/policy/fees.cpp')
-rw-r--r--src/policy/fees.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/policy/fees.cpp b/src/policy/fees.cpp
index eb6e9cc8bb..e139b06c72 100644
--- a/src/policy/fees.cpp
+++ b/src/policy/fees.cpp
@@ -4,6 +4,7 @@
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include "policy/fees.h"
+#include "policy/policy.h"
#include "amount.h"
#include "primitives/transaction.h"
@@ -504,7 +505,7 @@ CFeeRate CBlockPolicyEstimator::estimateFee(int confTarget)
return CFeeRate(median);
}
-CFeeRate CBlockPolicyEstimator::estimateSmartFee(int confTarget, int *answerFoundAtTarget)
+CFeeRate CBlockPolicyEstimator::estimateSmartFee(int confTarget, int *answerFoundAtTarget, const CTxMemPool *pool)
{
if (answerFoundAtTarget)
*answerFoundAtTarget = confTarget;
@@ -520,6 +521,11 @@ CFeeRate CBlockPolicyEstimator::estimateSmartFee(int confTarget, int *answerFoun
if (answerFoundAtTarget)
*answerFoundAtTarget = confTarget - 1;
+ // If mempool is limiting txs , return at least the min fee from the mempool
+ CAmount minPoolFee = pool->GetMinFee(GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000).GetFeePerK();
+ if (minPoolFee > 0 && minPoolFee > median)
+ return CFeeRate(minPoolFee);
+
if (median < 0)
return CFeeRate(0);
@@ -535,7 +541,7 @@ double CBlockPolicyEstimator::estimatePriority(int confTarget)
return priStats.EstimateMedianVal(confTarget, SUFFICIENT_PRITXS, MIN_SUCCESS_PCT, true, nBestSeenHeight);
}
-double CBlockPolicyEstimator::estimateSmartPriority(int confTarget, int *answerFoundAtTarget)
+double CBlockPolicyEstimator::estimateSmartPriority(int confTarget, int *answerFoundAtTarget, const CTxMemPool *pool)
{
if (answerFoundAtTarget)
*answerFoundAtTarget = confTarget;
@@ -543,6 +549,11 @@ double CBlockPolicyEstimator::estimateSmartPriority(int confTarget, int *answerF
if (confTarget <= 0 || (unsigned int)confTarget > priStats.GetMaxConfirms())
return -1;
+ // If mempool is limiting txs, no priority txs are allowed
+ CAmount minPoolFee = pool->GetMinFee(GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000).GetFeePerK();
+ if (minPoolFee > 0)
+ return INF_PRIORITY;
+
double median = -1;
while (median < 0 && (unsigned int)confTarget <= priStats.GetMaxConfirms()) {
median = priStats.EstimateMedianVal(confTarget++, SUFFICIENT_PRITXS, MIN_SUCCESS_PCT, true, nBestSeenHeight);
@@ -551,6 +562,7 @@ double CBlockPolicyEstimator::estimateSmartPriority(int confTarget, int *answerF
if (answerFoundAtTarget)
*answerFoundAtTarget = confTarget - 1;
+
return median;
}