Skip to content

Commit e7fe320

Browse files
committed
MOVEONLY: Fee functions wallet/wallet.cpp -> wallet/fees.cpp
1 parent d97fe20 commit e7fe320

File tree

2 files changed

+76
-76
lines changed

2 files changed

+76
-76
lines changed

src/wallet/fees.cpp

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,79 @@
1111
#include "validation.h"
1212
#include "wallet/coincontrol.h"
1313
#include "wallet/wallet.h"
14+
15+
16+
CAmount GetRequiredFee(unsigned int nTxBytes)
17+
{
18+
return std::max(CWallet::minTxFee.GetFee(nTxBytes), ::minRelayTxFee.GetFee(nTxBytes));
19+
}
20+
21+
22+
CAmount GetMinimumFee(unsigned int nTxBytes, const CCoinControl& coin_control, const CTxMemPool& pool, const CBlockPolicyEstimator& estimator, FeeCalculation *feeCalc)
23+
{
24+
/* User control of how to calculate fee uses the following parameter precedence:
25+
1. coin_control.m_feerate
26+
2. coin_control.m_confirm_target
27+
3. payTxFee (user-set global variable)
28+
4. nTxConfirmTarget (user-set global variable)
29+
The first parameter that is set is used.
30+
*/
31+
CAmount fee_needed;
32+
if (coin_control.m_feerate) { // 1.
33+
fee_needed = coin_control.m_feerate->GetFee(nTxBytes);
34+
if (feeCalc) feeCalc->reason = FeeReason::PAYTXFEE;
35+
// Allow to override automatic min/max check over coin control instance
36+
if (coin_control.fOverrideFeeRate) return fee_needed;
37+
}
38+
else if (!coin_control.m_confirm_target && ::payTxFee != CFeeRate(0)) { // 3. TODO: remove magic value of 0 for global payTxFee
39+
fee_needed = ::payTxFee.GetFee(nTxBytes);
40+
if (feeCalc) feeCalc->reason = FeeReason::PAYTXFEE;
41+
}
42+
else { // 2. or 4.
43+
// We will use smart fee estimation
44+
unsigned int target = coin_control.m_confirm_target ? *coin_control.m_confirm_target : ::nTxConfirmTarget;
45+
// By default estimates are economical iff we are signaling opt-in-RBF
46+
bool conservative_estimate = !coin_control.signalRbf;
47+
// Allow to override the default fee estimate mode over the CoinControl instance
48+
if (coin_control.m_fee_mode == FeeEstimateMode::CONSERVATIVE) conservative_estimate = true;
49+
else if (coin_control.m_fee_mode == FeeEstimateMode::ECONOMICAL) conservative_estimate = false;
50+
51+
fee_needed = estimator.estimateSmartFee(target, feeCalc, conservative_estimate).GetFee(nTxBytes);
52+
if (fee_needed == 0) {
53+
// if we don't have enough data for estimateSmartFee, then use fallbackFee
54+
fee_needed = CWallet::fallbackFee.GetFee(nTxBytes);
55+
if (feeCalc) feeCalc->reason = FeeReason::FALLBACK;
56+
}
57+
// Obey mempool min fee when using smart fee estimation
58+
CAmount min_mempool_fee = pool.GetMinFee(gArgs.GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000).GetFee(nTxBytes);
59+
if (fee_needed < min_mempool_fee) {
60+
fee_needed = min_mempool_fee;
61+
if (feeCalc) feeCalc->reason = FeeReason::MEMPOOL_MIN;
62+
}
63+
}
64+
65+
// prevent user from paying a fee below minRelayTxFee or minTxFee
66+
CAmount required_fee = GetRequiredFee(nTxBytes);
67+
if (required_fee > fee_needed) {
68+
fee_needed = required_fee;
69+
if (feeCalc) feeCalc->reason = FeeReason::REQUIRED;
70+
}
71+
// But always obey the maximum
72+
if (fee_needed > maxTxFee) {
73+
fee_needed = maxTxFee;
74+
if (feeCalc) feeCalc->reason = FeeReason::MAXTXFEE;
75+
}
76+
return fee_needed;
77+
}
78+
79+
80+
CFeeRate GetDiscardRate(const CBlockPolicyEstimator& estimator)
81+
{
82+
unsigned int highest_target = estimator.HighestTargetTracked(FeeEstimateHorizon::LONG_HALFLIFE);
83+
CFeeRate discard_rate = estimator.estimateSmartFee(highest_target, nullptr /* FeeCalculation */, false /* conservative */);
84+
// Don't let discard_rate be greater than longest possible fee estimate if we get a valid fee estimate
85+
discard_rate = (discard_rate == CFeeRate(0)) ? CWallet::m_discard_rate : std::min(discard_rate, CWallet::m_discard_rate);
86+
// Discard rate must be at least dustRelayFee
87+
discard_rate = std::max(discard_rate, ::dustRelayFee);
88+
return discard_rate;
89+
}

src/wallet/wallet.cpp

Lines changed: 0 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -2600,17 +2600,6 @@ bool CWallet::FundTransaction(CMutableTransaction& tx, CAmount& nFeeRet, int& nC
26002600
return true;
26012601
}
26022602

2603-
CFeeRate GetDiscardRate(const CBlockPolicyEstimator& estimator)
2604-
{
2605-
unsigned int highest_target = estimator.HighestTargetTracked(FeeEstimateHorizon::LONG_HALFLIFE);
2606-
CFeeRate discard_rate = estimator.estimateSmartFee(highest_target, nullptr /* FeeCalculation */, false /* conservative */);
2607-
// Don't let discard_rate be greater than longest possible fee estimate if we get a valid fee estimate
2608-
discard_rate = (discard_rate == CFeeRate(0)) ? CWallet::m_discard_rate : std::min(discard_rate, CWallet::m_discard_rate);
2609-
// Discard rate must be at least dustRelayFee
2610-
discard_rate = std::max(discard_rate, ::dustRelayFee);
2611-
return discard_rate;
2612-
}
2613-
26142603
bool CWallet::CreateTransaction(const std::vector<CRecipient>& vecSend, CWalletTx& wtxNew, CReserveKey& reservekey, CAmount& nFeeRet,
26152604
int& nChangePosInOut, std::string& strFailReason, const CCoinControl& coin_control, bool sign)
26162605
{
@@ -3032,71 +3021,6 @@ bool CWallet::AddAccountingEntry(const CAccountingEntry& acentry, CWalletDB *pwa
30323021
return true;
30333022
}
30343023

3035-
CAmount GetRequiredFee(unsigned int nTxBytes)
3036-
{
3037-
return std::max(CWallet::minTxFee.GetFee(nTxBytes), ::minRelayTxFee.GetFee(nTxBytes));
3038-
}
3039-
3040-
CAmount GetMinimumFee(unsigned int nTxBytes, const CCoinControl& coin_control, const CTxMemPool& pool, const CBlockPolicyEstimator& estimator, FeeCalculation *feeCalc)
3041-
{
3042-
/* User control of how to calculate fee uses the following parameter precedence:
3043-
1. coin_control.m_feerate
3044-
2. coin_control.m_confirm_target
3045-
3. payTxFee (user-set global variable)
3046-
4. nTxConfirmTarget (user-set global variable)
3047-
The first parameter that is set is used.
3048-
*/
3049-
CAmount fee_needed;
3050-
if (coin_control.m_feerate) { // 1.
3051-
fee_needed = coin_control.m_feerate->GetFee(nTxBytes);
3052-
if (feeCalc) feeCalc->reason = FeeReason::PAYTXFEE;
3053-
// Allow to override automatic min/max check over coin control instance
3054-
if (coin_control.fOverrideFeeRate) return fee_needed;
3055-
}
3056-
else if (!coin_control.m_confirm_target && ::payTxFee != CFeeRate(0)) { // 3. TODO: remove magic value of 0 for global payTxFee
3057-
fee_needed = ::payTxFee.GetFee(nTxBytes);
3058-
if (feeCalc) feeCalc->reason = FeeReason::PAYTXFEE;
3059-
}
3060-
else { // 2. or 4.
3061-
// We will use smart fee estimation
3062-
unsigned int target = coin_control.m_confirm_target ? *coin_control.m_confirm_target : ::nTxConfirmTarget;
3063-
// By default estimates are economical iff we are signaling opt-in-RBF
3064-
bool conservative_estimate = !coin_control.signalRbf;
3065-
// Allow to override the default fee estimate mode over the CoinControl instance
3066-
if (coin_control.m_fee_mode == FeeEstimateMode::CONSERVATIVE) conservative_estimate = true;
3067-
else if (coin_control.m_fee_mode == FeeEstimateMode::ECONOMICAL) conservative_estimate = false;
3068-
3069-
fee_needed = estimator.estimateSmartFee(target, feeCalc, conservative_estimate).GetFee(nTxBytes);
3070-
if (fee_needed == 0) {
3071-
// if we don't have enough data for estimateSmartFee, then use fallbackFee
3072-
fee_needed = CWallet::fallbackFee.GetFee(nTxBytes);
3073-
if (feeCalc) feeCalc->reason = FeeReason::FALLBACK;
3074-
}
3075-
// Obey mempool min fee when using smart fee estimation
3076-
CAmount min_mempool_fee = pool.GetMinFee(gArgs.GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000).GetFee(nTxBytes);
3077-
if (fee_needed < min_mempool_fee) {
3078-
fee_needed = min_mempool_fee;
3079-
if (feeCalc) feeCalc->reason = FeeReason::MEMPOOL_MIN;
3080-
}
3081-
}
3082-
3083-
// prevent user from paying a fee below minRelayTxFee or minTxFee
3084-
CAmount required_fee = GetRequiredFee(nTxBytes);
3085-
if (required_fee > fee_needed) {
3086-
fee_needed = required_fee;
3087-
if (feeCalc) feeCalc->reason = FeeReason::REQUIRED;
3088-
}
3089-
// But always obey the maximum
3090-
if (fee_needed > maxTxFee) {
3091-
fee_needed = maxTxFee;
3092-
if (feeCalc) feeCalc->reason = FeeReason::MAXTXFEE;
3093-
}
3094-
return fee_needed;
3095-
}
3096-
3097-
3098-
3099-
31003024
DBErrors CWallet::LoadWallet(bool& fFirstRunRet)
31013025
{
31023026
fFirstRunRet = false;

0 commit comments

Comments
 (0)