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. (cherry picked from commit bitcoin/bitcoin@901b01d674) Zcash: Take the upstream commit message (in particular the references to priority) with a pinch of salt, since we're going to be removing priority in the backport of bitcoin/bitcoin#9602 . The main reason to include this commit is that it removes `GetMinRelayFee`, which is assumed to have happened before bitcoin/bitcoin#9602 . Note that Zcash doesn't have upstream's `-maxmempool` parameter; it uses ZIP 401 for mempool size limiting instead. Signed-off-by: Daira Emma Hopwood <daira@jacaranda.org>
This commit is contained in:
parent
cf3786f86b
commit
16f90b06e8
40
src/main.cpp
40
src/main.cpp
|
@ -1772,32 +1772,6 @@ bool CheckTransactionWithoutProofVerification(const CTransaction& tx, CValidatio
|
|||
return true;
|
||||
}
|
||||
|
||||
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.GetFeeForRelay(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 */
|
||||
std::string FormatStateMessage(const CValidationState &state)
|
||||
{
|
||||
|
@ -1964,20 +1938,6 @@ bool AcceptToMemoryPool(
|
|||
CTxMemPoolEntry entry(tx, nFees, GetTime(), dPriority, chainActive.Height(), pool.HasNoInputsOf(tx), fSpendsCoinbase, nSigOps, consensusBranchId);
|
||||
unsigned int nSize = entry.GetTxSize();
|
||||
|
||||
// Before zcashd 4.2.0, we had a condition here to always accept a tx if it contained
|
||||
// JoinSplits and had at least the default fee. It is no longer necessary to treat
|
||||
// that as a special case, because the fee returned by GetMinRelayFee is always at
|
||||
// most DEFAULT_FEE.
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
// Require that free transactions have sufficient priority to be mined in the next block.
|
||||
if (GetBoolArg("-relaypriority", DEFAULT_RELAYPRIORITY) && nModifiedFees < ::minRelayTxFee.GetFeeForRelay(nSize) && !AllowFree(view.GetPriority(tx, chainActive.Height() + 1))) {
|
||||
return state.DoS(0, false, REJECT_INSUFFICIENTFEE, "insufficient priority");
|
||||
|
|
|
@ -359,9 +359,6 @@ struct CNodeStateStats {
|
|||
};
|
||||
|
||||
|
||||
|
||||
CAmount GetMinRelayFee(const CTransaction& tx, unsigned int nBytes, bool fAllowFree);
|
||||
|
||||
/**
|
||||
* Count ECDSA signature operations the old-fashioned (pre-0.6) way
|
||||
* @return number of sigops this transaction's outputs will produce when spent
|
||||
|
|
Loading…
Reference in New Issue