Merge #10455: Simplify feebumper minimum fee code slightly
88b8f0b
Simplify feebumper minimum fee code slightly (Russell Yanofsky)
Tree-SHA512: 4465daef63936860d016a7fd7fd31ce62878d87cb943a90f321b07a40accdc5e7970d99de46b2bc924eb0b422144d6f01649855949395518790ecd05d300ee52
This commit is contained in:
commit
0747d33498
5 changed files with 12 additions and 17 deletions
|
@ -66,7 +66,7 @@ bool CFeeBumper::preconditionChecks(const CWallet *pWallet, const CWalletTx& wtx
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
CFeeBumper::CFeeBumper(const CWallet *pWallet, const uint256 txidIn, int newConfirmTarget, bool specifiedConfirmTarget, CAmount totalFee, bool newTxReplaceable)
|
CFeeBumper::CFeeBumper(const CWallet *pWallet, const uint256 txidIn, int newConfirmTarget, bool ignoreGlobalPayTxFee, CAmount totalFee, bool newTxReplaceable)
|
||||||
:
|
:
|
||||||
txid(std::move(txidIn)),
|
txid(std::move(txidIn)),
|
||||||
nOldFee(0),
|
nOldFee(0),
|
||||||
|
@ -165,15 +165,7 @@ CFeeBumper::CFeeBumper(const CWallet *pWallet, const uint256 txidIn, int newConf
|
||||||
nNewFee = totalFee;
|
nNewFee = totalFee;
|
||||||
nNewFeeRate = CFeeRate(totalFee, maxNewTxSize);
|
nNewFeeRate = CFeeRate(totalFee, maxNewTxSize);
|
||||||
} else {
|
} else {
|
||||||
// if user specified a confirm target then don't consider any global payTxFee
|
nNewFee = CWallet::GetMinimumFee(maxNewTxSize, newConfirmTarget, mempool, ::feeEstimator, ignoreGlobalPayTxFee);
|
||||||
if (specifiedConfirmTarget) {
|
|
||||||
nNewFee = CWallet::GetMinimumFee(maxNewTxSize, newConfirmTarget, mempool, ::feeEstimator, true);
|
|
||||||
}
|
|
||||||
// otherwise use the regular wallet logic to select payTxFee or default confirm target
|
|
||||||
else {
|
|
||||||
nNewFee = CWallet::GetMinimumFee(maxNewTxSize, newConfirmTarget, mempool, ::feeEstimator);
|
|
||||||
}
|
|
||||||
|
|
||||||
nNewFeeRate = CFeeRate(nNewFee, maxNewTxSize);
|
nNewFeeRate = CFeeRate(nNewFee, maxNewTxSize);
|
||||||
|
|
||||||
// New fee rate must be at least old rate + minimum incremental relay rate
|
// New fee rate must be at least old rate + minimum incremental relay rate
|
||||||
|
|
|
@ -24,7 +24,7 @@ enum class BumpFeeResult
|
||||||
class CFeeBumper
|
class CFeeBumper
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CFeeBumper(const CWallet *pWalletIn, const uint256 txidIn, int newConfirmTarget, bool specifiedConfirmTarget, CAmount totalFee, bool newTxReplaceable);
|
CFeeBumper(const CWallet *pWalletIn, const uint256 txidIn, int newConfirmTarget, bool ignoreGlobalPayTxFee, CAmount totalFee, bool newTxReplaceable);
|
||||||
BumpFeeResult getResult() const { return currentResult; }
|
BumpFeeResult getResult() const { return currentResult; }
|
||||||
const std::vector<std::string>& getErrors() const { return vErrors; }
|
const std::vector<std::string>& getErrors() const { return vErrors; }
|
||||||
CAmount getOldFee() const { return nOldFee; }
|
CAmount getOldFee() const { return nOldFee; }
|
||||||
|
|
|
@ -2834,7 +2834,7 @@ UniValue bumpfee(const JSONRPCRequest& request)
|
||||||
hash.SetHex(request.params[0].get_str());
|
hash.SetHex(request.params[0].get_str());
|
||||||
|
|
||||||
// optional parameters
|
// optional parameters
|
||||||
bool specifiedConfirmTarget = false;
|
bool ignoreGlobalPayTxFee = false;
|
||||||
int newConfirmTarget = nTxConfirmTarget;
|
int newConfirmTarget = nTxConfirmTarget;
|
||||||
CAmount totalFee = 0;
|
CAmount totalFee = 0;
|
||||||
bool replaceable = true;
|
bool replaceable = true;
|
||||||
|
@ -2851,7 +2851,10 @@ UniValue bumpfee(const JSONRPCRequest& request)
|
||||||
if (options.exists("confTarget") && options.exists("totalFee")) {
|
if (options.exists("confTarget") && options.exists("totalFee")) {
|
||||||
throw JSONRPCError(RPC_INVALID_PARAMETER, "confTarget and totalFee options should not both be set. Please provide either a confirmation target for fee estimation or an explicit total fee for the transaction.");
|
throw JSONRPCError(RPC_INVALID_PARAMETER, "confTarget and totalFee options should not both be set. Please provide either a confirmation target for fee estimation or an explicit total fee for the transaction.");
|
||||||
} else if (options.exists("confTarget")) {
|
} else if (options.exists("confTarget")) {
|
||||||
specifiedConfirmTarget = true;
|
// If the user has explicitly set a confTarget in this rpc call,
|
||||||
|
// then override the default logic that uses the global payTxFee
|
||||||
|
// instead of the confirmation target.
|
||||||
|
ignoreGlobalPayTxFee = true;
|
||||||
newConfirmTarget = options["confTarget"].get_int();
|
newConfirmTarget = options["confTarget"].get_int();
|
||||||
if (newConfirmTarget <= 0) { // upper-bound will be checked by estimatefee/smartfee
|
if (newConfirmTarget <= 0) { // upper-bound will be checked by estimatefee/smartfee
|
||||||
throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid confTarget (cannot be <= 0)");
|
throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid confTarget (cannot be <= 0)");
|
||||||
|
@ -2871,7 +2874,7 @@ UniValue bumpfee(const JSONRPCRequest& request)
|
||||||
LOCK2(cs_main, pwallet->cs_wallet);
|
LOCK2(cs_main, pwallet->cs_wallet);
|
||||||
EnsureWalletIsUnlocked(pwallet);
|
EnsureWalletIsUnlocked(pwallet);
|
||||||
|
|
||||||
CFeeBumper feeBump(pwallet, hash, newConfirmTarget, specifiedConfirmTarget, totalFee, replaceable);
|
CFeeBumper feeBump(pwallet, hash, newConfirmTarget, ignoreGlobalPayTxFee, totalFee, replaceable);
|
||||||
BumpFeeResult res = feeBump.getResult();
|
BumpFeeResult res = feeBump.getResult();
|
||||||
if (res != BumpFeeResult::OK)
|
if (res != BumpFeeResult::OK)
|
||||||
{
|
{
|
||||||
|
|
|
@ -2890,12 +2890,12 @@ CAmount CWallet::GetRequiredFee(unsigned int nTxBytes)
|
||||||
return std::max(minTxFee.GetFee(nTxBytes), ::minRelayTxFee.GetFee(nTxBytes));
|
return std::max(minTxFee.GetFee(nTxBytes), ::minRelayTxFee.GetFee(nTxBytes));
|
||||||
}
|
}
|
||||||
|
|
||||||
CAmount CWallet::GetMinimumFee(unsigned int nTxBytes, unsigned int nConfirmTarget, const CTxMemPool& pool, const CBlockPolicyEstimator& estimator, bool ignoreUserSetFee)
|
CAmount CWallet::GetMinimumFee(unsigned int nTxBytes, unsigned int nConfirmTarget, const CTxMemPool& pool, const CBlockPolicyEstimator& estimator, bool ignoreGlobalPayTxFee)
|
||||||
{
|
{
|
||||||
// payTxFee is the user-set global for desired feerate
|
// payTxFee is the user-set global for desired feerate
|
||||||
CAmount nFeeNeeded = payTxFee.GetFee(nTxBytes);
|
CAmount nFeeNeeded = payTxFee.GetFee(nTxBytes);
|
||||||
// User didn't set: use -txconfirmtarget to estimate...
|
// User didn't set: use -txconfirmtarget to estimate...
|
||||||
if (nFeeNeeded == 0 || ignoreUserSetFee) {
|
if (nFeeNeeded == 0 || ignoreGlobalPayTxFee) {
|
||||||
int estimateFoundTarget = nConfirmTarget;
|
int estimateFoundTarget = nConfirmTarget;
|
||||||
nFeeNeeded = estimator.estimateSmartFee(nConfirmTarget, &estimateFoundTarget, pool).GetFee(nTxBytes);
|
nFeeNeeded = estimator.estimateSmartFee(nConfirmTarget, &estimateFoundTarget, pool).GetFee(nTxBytes);
|
||||||
// ... unless we don't have enough mempool data for estimatefee, then use fallbackFee
|
// ... unless we don't have enough mempool data for estimatefee, then use fallbackFee
|
||||||
|
|
|
@ -959,7 +959,7 @@ public:
|
||||||
* Estimate the minimum fee considering user set parameters
|
* Estimate the minimum fee considering user set parameters
|
||||||
* and the required fee
|
* and the required fee
|
||||||
*/
|
*/
|
||||||
static CAmount GetMinimumFee(unsigned int nTxBytes, unsigned int nConfirmTarget, const CTxMemPool& pool, const CBlockPolicyEstimator& estimator, bool ignoreUserSetFee = false);
|
static CAmount GetMinimumFee(unsigned int nTxBytes, unsigned int nConfirmTarget, const CTxMemPool& pool, const CBlockPolicyEstimator& estimator, bool ignoreGlobalPayTxFee = false);
|
||||||
/**
|
/**
|
||||||
* Return the minimum required fee taking into account the
|
* Return the minimum required fee taking into account the
|
||||||
* floating relay fee and user set minimum transaction fee
|
* floating relay fee and user set minimum transaction fee
|
||||||
|
|
Loading…
Reference in a new issue