Remove GetMinRelayFee
One test in AcceptToMemoryPool was to compare a transaction's fee agains the value returned by GetMinRelayFee. This value was zero for all small transactions. For larger transactions (between DEFAULT_BLOCK_PRIORITY_SIZE and MAX_STANDARD_TX_SIZE), this function was preventing low fee transactions from ever being accepted. With this function removed, we will now allow transactions in that range with fees (including modifications via PrioritiseTransaction) below the minRelayTxFee, provided that they have sufficient priority.
This commit is contained in:
parent
27fae3484c
commit
901b01d674
2 changed files with 0 additions and 37 deletions
35
src/main.cpp
35
src/main.cpp
|
@ -800,32 +800,6 @@ void LimitMempoolSize(CTxMemPool& pool, size_t limit, unsigned long age) {
|
||||||
pcoinsTip->Uncache(removed);
|
pcoinsTip->Uncache(removed);
|
||||||
}
|
}
|
||||||
|
|
||||||
CAmount GetMinRelayFee(const CTransaction& tx, const CTxMemPool& pool, unsigned int nBytes, bool fAllowFree)
|
|
||||||
{
|
|
||||||
uint256 hash = tx.GetHash();
|
|
||||||
double dPriorityDelta = 0;
|
|
||||||
CAmount nFeeDelta = 0;
|
|
||||||
pool.ApplyDeltas(hash, dPriorityDelta, nFeeDelta);
|
|
||||||
if (dPriorityDelta > 0 || nFeeDelta > 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
CAmount nMinFee = ::minRelayTxFee.GetFee(nBytes);
|
|
||||||
|
|
||||||
if (fAllowFree)
|
|
||||||
{
|
|
||||||
// There is a free transaction area in blocks created by most miners,
|
|
||||||
// * If we are relaying we allow transactions up to DEFAULT_BLOCK_PRIORITY_SIZE - 1000
|
|
||||||
// to be considered to fall into this category. We don't want to encourage sending
|
|
||||||
// multiple transactions instead of one big transaction to avoid fees.
|
|
||||||
if (nBytes < (DEFAULT_BLOCK_PRIORITY_SIZE - 1000))
|
|
||||||
nMinFee = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!MoneyRange(nMinFee))
|
|
||||||
nMinFee = MAX_MONEY;
|
|
||||||
return nMinFee;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Convert CValidationState to a human-readable message for logging */
|
/** Convert CValidationState to a human-readable message for logging */
|
||||||
std::string FormatStateMessage(const CValidationState &state)
|
std::string FormatStateMessage(const CValidationState &state)
|
||||||
{
|
{
|
||||||
|
@ -990,15 +964,6 @@ bool AcceptToMemoryPoolWorker(CTxMemPool& pool, CValidationState &state, const C
|
||||||
CTxMemPoolEntry entry(tx, nFees, GetTime(), dPriority, chainActive.Height(), pool.HasNoInputsOf(tx), inChainInputValue, fSpendsCoinbase, nSigOps);
|
CTxMemPoolEntry entry(tx, nFees, GetTime(), dPriority, chainActive.Height(), pool.HasNoInputsOf(tx), inChainInputValue, fSpendsCoinbase, nSigOps);
|
||||||
unsigned int nSize = entry.GetTxSize();
|
unsigned int nSize = entry.GetTxSize();
|
||||||
|
|
||||||
// Don't accept it if it can't get into a block
|
|
||||||
CAmount txMinFee = GetMinRelayFee(tx, pool, nSize, true);
|
|
||||||
|
|
||||||
// txMinFee takes into account priority/fee deltas, so compare using
|
|
||||||
// nFees rather than nModifiedFees
|
|
||||||
if (fLimitFree && nFees < txMinFee)
|
|
||||||
return state.DoS(0, false, REJECT_INSUFFICIENTFEE, "insufficient fee", false,
|
|
||||||
strprintf("%d < %d", nFees, txMinFee));
|
|
||||||
|
|
||||||
CAmount mempoolRejectFee = pool.GetMinFee(GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000).GetFee(nSize);
|
CAmount mempoolRejectFee = pool.GetMinFee(GetArg("-maxmempool", DEFAULT_MAX_MEMPOOL_SIZE) * 1000000).GetFee(nSize);
|
||||||
if (mempoolRejectFee > 0 && nModifiedFees < mempoolRejectFee) {
|
if (mempoolRejectFee > 0 && nModifiedFees < mempoolRejectFee) {
|
||||||
return state.DoS(0, false, REJECT_INSUFFICIENTFEE, "mempool min fee not met", false, strprintf("%d < %d", nFees, mempoolRejectFee));
|
return state.DoS(0, false, REJECT_INSUFFICIENTFEE, "mempool min fee not met", false, strprintf("%d < %d", nFees, mempoolRejectFee));
|
||||||
|
|
|
@ -293,8 +293,6 @@ struct CDiskTxPos : public CDiskBlockPos
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
CAmount GetMinRelayFee(const CTransaction& tx, unsigned int nBytes, bool fAllowFree);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Count ECDSA signature operations the old-fashioned (pre-0.6) way
|
* Count ECDSA signature operations the old-fashioned (pre-0.6) way
|
||||||
* @return number of sigops this transaction's outputs will produce when spent
|
* @return number of sigops this transaction's outputs will produce when spent
|
||||||
|
|
Loading…
Reference in a new issue