Changeset View
Changeset View
Standalone View
Standalone View
src/wallet/fees.cpp
// Copyright (c) 2009-2010 Satoshi Nakamoto | // Copyright (c) 2009-2010 Satoshi Nakamoto | ||||
// Copyright (c) 2009-2017 The Bitcoin Core developers | // Copyright (c) 2009-2017 The Bitcoin Core developers | ||||
// Distributed under the MIT software license, see the accompanying | // Distributed under the MIT software license, see the accompanying | ||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | // file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||
#include "wallet/fees.h" | #include "wallet/fees.h" | ||||
#include "config.h" | #include "config.h" | ||||
#include "policy/policy.h" | #include "policy/policy.h" | ||||
#include "txmempool.h" | #include "txmempool.h" | ||||
#include "util.h" | #include "util.h" | ||||
#include "validation.h" | #include "validation.h" | ||||
#include "wallet/coincontrol.h" | |||||
#include "wallet/wallet.h" | #include "wallet/wallet.h" | ||||
Amount GetMinimumFee(unsigned int nTxBytes, const CTxMemPool &pool, | Amount GetMinimumFee(unsigned int nTxBytes, unsigned int nConfirmTarget, | ||||
Amount targetFee) { | const CTxMemPool &pool, Amount targetFee) { | ||||
Amount nFeeNeeded = targetFee; | Amount nFeeNeeded = targetFee; | ||||
// User didn't set: use -txconfirmtarget to estimate... | // User didn't set: use -txconfirmtarget to estimate... | ||||
if (nFeeNeeded == Amount::zero()) { | if (nFeeNeeded == Amount::zero()) { | ||||
nFeeNeeded = pool.estimateFee(nConfirmTarget).GetFeeCeiling(nTxBytes); | nFeeNeeded = pool.estimateFee(nConfirmTarget).GetFeeCeiling(nTxBytes); | ||||
// ... unless we don't have enough mempool data for estimatefee, then | // ... unless we don't have enough mempool data for estimatefee, then | ||||
// use fallbackFee. | // use fallbackFee. | ||||
if (nFeeNeeded == Amount::zero()) { | if (nFeeNeeded == Amount::zero()) { | ||||
nFeeNeeded = CWallet::fallbackFee.GetFeeCeiling(nTxBytes); | nFeeNeeded = CWallet::fallbackFee.GetFeeCeiling(nTxBytes); | ||||
} | } | ||||
} | } | ||||
// Prevent user from paying a fee below minRelayTxFee or minTxFee. | // Prevent user from paying a fee below minRelayTxFee or minTxFee. | ||||
nFeeNeeded = | nFeeNeeded = | ||||
std::max(nFeeNeeded, GetConfig().GetMinFeePerKB().GetFee(nTxBytes)); | std::max(nFeeNeeded, GetConfig().GetMinFeePerKB().GetFee(nTxBytes)); | ||||
// But always obey the maximum. | // But always obey the maximum. | ||||
if (nFeeNeeded > maxTxFee) { | if (nFeeNeeded > maxTxFee) { | ||||
nFeeNeeded = maxTxFee; | nFeeNeeded = maxTxFee; | ||||
} | } | ||||
return nFeeNeeded; | return nFeeNeeded; | ||||
} | } | ||||
Amount GetMinimumFee(unsigned int nTxBytes, const CTxMemPool &pool) { | Amount GetMinimumFee(unsigned int nTxBytes, unsigned int nConfirmTarget, | ||||
const CTxMemPool &pool) { | |||||
// payTxFee is the user-set global for desired feerate. | // payTxFee is the user-set global for desired feerate. | ||||
return GetMinimumFee(nTxBytes, pool, payTxFee.GetFeeCeiling(nTxBytes)); | return GetMinimumFee(nTxBytes, nConfirmTarget, pool, | ||||
payTxFee.GetFeeCeiling(nTxBytes)); | |||||
} | } |