diff options
author | Wladimir J. van der Laan <laanwj@gmail.com> | 2014-07-08 09:20:15 +0200 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@gmail.com> | 2014-07-08 09:22:24 +0200 |
commit | 7d0564569385439e7d649f92eb02102e5b56a12b (patch) | |
tree | 2dead75696e53fd1804f5fe478506e34da625f76 | |
parent | 1fedd65fcf9ac04b70f0fa8cf6caa9629857d586 (diff) | |
parent | d88af560111863c3e9c1ae855dcc287f04dffb02 (diff) |
Merge pull request #4465
d88af56 Fee fixes (Cozz Lovan)
-rw-r--r-- | src/core.cpp | 7 | ||||
-rw-r--r-- | src/init.cpp | 3 | ||||
-rw-r--r-- | src/qt/coincontroldialog.cpp | 22 | ||||
-rw-r--r-- | src/wallet.cpp | 2 |
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. |