aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2014-07-08 09:20:15 +0200
committerWladimir J. van der Laan <laanwj@gmail.com>2014-07-08 09:22:24 +0200
commit7d0564569385439e7d649f92eb02102e5b56a12b (patch)
tree2dead75696e53fd1804f5fe478506e34da625f76
parent1fedd65fcf9ac04b70f0fa8cf6caa9629857d586 (diff)
parentd88af560111863c3e9c1ae855dcc287f04dffb02 (diff)
downloadbitcoin-7d0564569385439e7d649f92eb02102e5b56a12b.tar.xz
Merge pull request #4465
d88af56 Fee fixes (Cozz Lovan)
-rw-r--r--src/core.cpp7
-rw-r--r--src/init.cpp3
-rw-r--r--src/qt/coincontroldialog.cpp22
-rw-r--r--src/wallet.cpp2
4 files changed, 24 insertions, 10 deletions
diff --git a/src/core.cpp b/src/core.cpp
index 47f3b2a015..b56994ecf3 100644
--- a/src/core.cpp
+++ b/src/core.cpp
@@ -82,7 +82,12 @@ CFeeRate::CFeeRate(int64_t nFeePaid, size_t nSize)
int64_t CFeeRate::GetFee(size_t nSize) const
{
- return nSatoshisPerK*nSize / 1000;
+ int64_t nFee = nSatoshisPerK*nSize / 1000;
+
+ if (nFee == 0 && nSatoshisPerK > 0)
+ nFee = nSatoshisPerK;
+
+ return nFee;
}
std::string CFeeRate::ToString() const
diff --git a/src/init.cpp b/src/init.cpp
index 880ccaca1d..f9e568a207 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -253,7 +253,8 @@ std::string HelpMessage(HelpMessageMode mode)
#ifdef ENABLE_WALLET
strUsage += "\n" + _("Wallet options:") + "\n";
strUsage += " -disablewallet " + _("Do not load the wallet and disable wallet RPC calls") + "\n";
- strUsage += " -mintxfee=<amt> " + strprintf(_("Fees (in BTC/Kb) smaller than this are considered zero fee for transaction creation (default: %s)"), FormatMoney(CWallet::minTxFee.GetFeePerK())) + "\n";
+ if (GetBoolArg("-help-debug", false))
+ strUsage += " -mintxfee=<amt> " + strprintf(_("Fees (in BTC/Kb) smaller than this are considered zero fee for transaction creation (default: %s)"), FormatMoney(CWallet::minTxFee.GetFeePerK())) + "\n";
strUsage += " -paytxfee=<amt> " + strprintf(_("Fee (in BTC/kB) to add to transactions you send (default: %s)"), FormatMoney(payTxFee.GetFeePerK())) + "\n";
strUsage += " -rescan " + _("Rescan the block chain for missing wallet transactions") + " " + _("on startup") + "\n";
strUsage += " -respendnotify=<cmd> " + _("Execute command when a network tx respends wallet tx input (%s=respend TxID, %t=wallet TxID)") + "\n";
diff --git a/src/qt/coincontroldialog.cpp b/src/qt/coincontroldialog.cpp
index c73cf416a8..b4ddda3eaa 100644
--- a/src/qt/coincontroldialog.cpp
+++ b/src/qt/coincontroldialog.cpp
@@ -419,6 +419,8 @@ QString CoinControlDialog::getPriorityLabel(const CTxMemPool& pool, double dPrio
}
// Note: if mempool hasn't accumulated enough history (estimatePriority
// returns -1) we're conservative and classify as "lowest"
+ if (mempool.estimatePriority(nTxConfirmTarget) <= 0 && AllowFree(dPriority))
+ return ">=" + tr("medium");
return tr("lowest");
}
@@ -523,15 +525,21 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog)
dPriority = dPriorityInputs / (nBytes - nBytesInputs + (nQuantityUncompressed * 29)); // 29 = 180 - 151 (uncompressed public keys are over the limit. max 151 bytes of the input are ignored for priority)
sPriorityLabel = CoinControlDialog::getPriorityLabel(mempool, dPriority);
+ // Voluntary Fee
+ nPayFee = payTxFee.GetFee(max((unsigned int)1000, nBytes));
+
// Min Fee
- nPayFee = CWallet::GetMinimumFee(nBytes, nTxConfirmTarget, mempool);
+ if (nPayFee == 0)
+ {
+ nPayFee = CWallet::GetMinimumFee(nBytes, nTxConfirmTarget, mempool);
- double dPriorityNeeded = mempool.estimatePriority(nTxConfirmTarget);
- if (dPriorityNeeded <= 0) // Not enough mempool history: never send free
- dPriorityNeeded = std::numeric_limits<double>::max();
+ double dPriorityNeeded = mempool.estimatePriority(nTxConfirmTarget);
+ if (dPriorityNeeded <= 0 && !AllowFree(dPriority)) // not enough mempool history: never send free
+ dPriorityNeeded = std::numeric_limits<double>::max();
- if (nBytes <= MAX_FREE_TRANSACTION_CREATE_SIZE && dPriority >= dPriorityNeeded)
- nPayFee = 0;
+ if (nBytes <= MAX_FREE_TRANSACTION_CREATE_SIZE && dPriority >= dPriorityNeeded)
+ nPayFee = 0;
+ }
if (nPayAmount > 0)
{
@@ -612,7 +620,7 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog)
QString toolTip3 = tr("This label turns red, if any recipient receives an amount smaller than %1.").arg(BitcoinUnits::formatWithUnit(nDisplayUnit, ::minRelayTxFee.GetFee(546)));
// how many satoshis the estimated fee can vary per byte we guess wrong
- double dFeeVary = (double)std::max(CWallet::minTxFee.GetFeePerK(), payTxFee.GetFeePerK()) / 1000;
+ double dFeeVary = (double)std::max(CWallet::minTxFee.GetFeePerK(), std::max(payTxFee.GetFeePerK(), mempool.estimateFee(nTxConfirmTarget).GetFeePerK())) / 1000;
QString toolTip4 = tr("Can vary +/- %1 satoshi(s) per input.").arg(dFeeVary);
l3->setToolTip(toolTip4);
diff --git a/src/wallet.cpp b/src/wallet.cpp
index ea99b89a5a..a54494f935 100644
--- a/src/wallet.cpp
+++ b/src/wallet.cpp
@@ -1484,7 +1484,7 @@ bool CWallet::CreateTransaction(const vector<pair<CScript, int64_t> >& vecSend,
break;
// Small enough, and priority high enough, to send for free
- if (dPriority >= dPriorityNeeded)
+ if (dPriorityNeeded > 0 && dPriority >= dPriorityNeeded)
break;
// Include more fee and try again.