MCPcopy Create free account
hub / github.com/ElementsProject/elements / AcceptSingleTransaction

Method AcceptSingleTransaction

src/validation.cpp:1249–1276  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1247}
1248
1249MempoolAcceptResult MemPoolAccept::AcceptSingleTransaction(const CTransactionRef& ptx, ATMPArgs& args)
1250{
1251 AssertLockHeld(cs_main);
1252 LOCK(m_pool.cs); // mempool "read lock" (held through GetMainSignals().TransactionAddedToMempool())
1253
1254 Workspace ws(ptx, args.m_chainparams.HashGenesisBlock());
1255
1256 if (!PreChecks(args, ws)) return MempoolAcceptResult::Failure(ws.m_state);
1257
1258 if (m_rbf && !ReplacementChecks(ws)) return MempoolAcceptResult::Failure(ws.m_state);
1259
1260 // Perform the inexpensive checks first and avoid hashing and signature verification unless
1261 // those checks pass, to mitigate CPU exhaustion denial-of-service attacks.
1262 if (!PolicyScriptChecks(args, ws)) return MempoolAcceptResult::Failure(ws.m_state);
1263
1264 if (!ConsensusScriptChecks(args, ws)) return MempoolAcceptResult::Failure(ws.m_state);
1265
1266 // Tx was accepted, but not added
1267 if (args.m_test_accept) {
1268 return MempoolAcceptResult::Success(std::move(ws.m_replaced_transactions), ws.m_vsize, ws.m_base_fees);
1269 }
1270
1271 if (!Finalize(args, ws)) return MempoolAcceptResult::Failure(ws.m_state);
1272
1273 GetMainSignals().TransactionAddedToMempool(ptx, m_pool.GetAndIncrementSequence());
1274
1275 return MempoolAcceptResult::Success(std::move(ws.m_replaced_transactions), ws.m_vsize, ws.m_base_fees);
1276}
1277
1278PackageMempoolAcceptResult MemPoolAccept::AcceptMultipleTransactions(const std::vector<CTransactionRef>& txns, ATMPArgs& args)
1279{

Callers 1

EXCLUSIVE_LOCKS_REQUIREDFunction · 0.80

Calls 1

Tested by

no test coverage detected