|
|
@@ -547,6 +547,7 @@ static bool AcceptToMemoryPoolWorker(const CChainParams& chainparams, CTxMemPool |
|
|
|
const CTransaction& tx = *ptx; |
|
|
|
const uint256 hash = tx.GetHash(); |
|
|
|
AssertLockHeld(cs_main); |
|
|
|
LOCK(pool.cs); // mempool "read lock" (held through GetMainSignals().TransactionAddedToMempool()) |
|
|
|
if (pfMissingInputs) |
|
|
|
*pfMissingInputs = false; |
|
|
|
|
|
|
@@ -581,8 +582,6 @@ static bool AcceptToMemoryPoolWorker(const CChainParams& chainparams, CTxMemPool |
|
|
|
|
|
|
|
// Check for conflicts with in-memory transactions |
|
|
|
std::set<uint256> setConflicts; |
|
|
|
{ |
|
|
|
LOCK(pool.cs); // protect pool.mapNextTx |
|
|
|
for (const CTxIn &txin : tx.vin) |
|
|
|
{ |
|
|
|
auto itConflicting = pool.mapNextTx.find(txin.prevout); |
|
|
@@ -623,15 +622,12 @@ static bool AcceptToMemoryPoolWorker(const CChainParams& chainparams, CTxMemPool |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
{ |
|
|
|
CCoinsView dummy; |
|
|
|
CCoinsViewCache view(&dummy); |
|
|
|
|
|
|
|
LockPoints lp; |
|
|
|
{ |
|
|
|
LOCK(pool.cs); |
|
|
|
CCoinsViewMemPool viewMemPool(pcoinsTip.get(), pool); |
|
|
|
view.SetBackend(viewMemPool); |
|
|
|
|
|
|
@@ -670,8 +666,6 @@ static bool AcceptToMemoryPoolWorker(const CChainParams& chainparams, CTxMemPool |
|
|
|
if (!CheckSequenceLocks(tx, STANDARD_LOCKTIME_VERIFY_FLAGS, &lp)) |
|
|
|
return state.DoS(0, false, REJECT_NONSTANDARD, "non-BIP68-final"); |
|
|
|
|
|
|
|
} // end LOCK(pool.cs) |
|
|
|
|
|
|
|
CAmount nFees = 0; |
|
|
|
if (!Consensus::CheckTxInputs(tx, state, view, GetSpendHeight(view), nFees)) { |
|
|
|
return error("%s: Consensus::CheckTxInputs: %s, %s", __func__, tx.GetHash().ToString(), FormatStateMessage(state)); |
|
|
@@ -768,7 +762,6 @@ static bool AcceptToMemoryPoolWorker(const CChainParams& chainparams, CTxMemPool |
|
|
|
// If we don't hold the lock allConflicting might be incomplete; the |
|
|
|
// subsequent RemoveStaged() and addUnchecked() calls don't guarantee |
|
|
|
// mempool consistency for us. |
|
|
|
LOCK(pool.cs); |
|
|
|
const bool fReplacementTransaction = setConflicts.size(); |
|
|
|
if (fReplacementTransaction) |
|
|
|
{ |