Implement ignore_rejects for transaction packages

This commit is contained in:
Luke Dashjr 2023-08-01 18:54:53 +00:00
parent f433dadedd
commit ce3e33cde2
2 changed files with 8 additions and 8 deletions

View File

@ -504,10 +504,10 @@ public:
/** Parameters for test package mempool validation through testmempoolaccept. */ /** Parameters for test package mempool validation through testmempoolaccept. */
static ATMPArgs PackageTestAccept(const CChainParams& chainparams, int64_t accept_time, static ATMPArgs PackageTestAccept(const CChainParams& chainparams, int64_t accept_time,
std::vector<COutPoint>& coins_to_uncache) { const ignore_rejects_type& ignore_rejects, std::vector<COutPoint>& coins_to_uncache) {
return ATMPArgs{/* m_chainparams */ chainparams, return ATMPArgs{/* m_chainparams */ chainparams,
/* m_accept_time */ accept_time, /* m_accept_time */ accept_time,
empty_ignore_rejects, /* m_ignore_rejects */ ignore_rejects,
/* m_coins_to_uncache */ coins_to_uncache, /* m_coins_to_uncache */ coins_to_uncache,
/* m_test_accept */ true, /* m_test_accept */ true,
/* m_allow_replacement */ false, /* m_allow_replacement */ false,
@ -521,10 +521,10 @@ public:
/** Parameters for child-with-unconfirmed-parents package validation. */ /** Parameters for child-with-unconfirmed-parents package validation. */
static ATMPArgs PackageChildWithParents(const CChainParams& chainparams, int64_t accept_time, static ATMPArgs PackageChildWithParents(const CChainParams& chainparams, int64_t accept_time,
std::vector<COutPoint>& coins_to_uncache, const std::optional<CFeeRate>& client_maxfeerate) { std::vector<COutPoint>& coins_to_uncache, const std::optional<CFeeRate>& client_maxfeerate, const ignore_rejects_type& ignore_rejects) {
return ATMPArgs{/* m_chainparams */ chainparams, return ATMPArgs{/* m_chainparams */ chainparams,
/* m_accept_time */ accept_time, /* m_accept_time */ accept_time,
empty_ignore_rejects, /* m_ignore_rejects */ ignore_rejects,
/* m_coins_to_uncache */ coins_to_uncache, /* m_coins_to_uncache */ coins_to_uncache,
/* m_test_accept */ false, /* m_test_accept */ false,
/* m_allow_replacement */ true, /* m_allow_replacement */ true,
@ -1920,7 +1920,7 @@ MempoolAcceptResult AcceptToMemoryPool(Chainstate& active_chainstate, const CTra
} }
PackageMempoolAcceptResult ProcessNewPackage(Chainstate& active_chainstate, CTxMemPool& pool, PackageMempoolAcceptResult ProcessNewPackage(Chainstate& active_chainstate, CTxMemPool& pool,
const Package& package, bool test_accept, const std::optional<CFeeRate>& client_maxfeerate) const Package& package, bool test_accept, const std::optional<CFeeRate>& client_maxfeerate, const ignore_rejects_type& ignore_rejects)
{ {
AssertLockHeld(cs_main); AssertLockHeld(cs_main);
assert(!package.empty()); assert(!package.empty());
@ -1931,10 +1931,10 @@ PackageMempoolAcceptResult ProcessNewPackage(Chainstate& active_chainstate, CTxM
auto result = [&]() EXCLUSIVE_LOCKS_REQUIRED(cs_main) { auto result = [&]() EXCLUSIVE_LOCKS_REQUIRED(cs_main) {
AssertLockHeld(cs_main); AssertLockHeld(cs_main);
if (test_accept) { if (test_accept) {
auto args = MemPoolAccept::ATMPArgs::PackageTestAccept(chainparams, GetTime(), coins_to_uncache); auto args = MemPoolAccept::ATMPArgs::PackageTestAccept(chainparams, GetTime(), ignore_rejects, coins_to_uncache);
return MemPoolAccept(pool, active_chainstate).AcceptMultipleTransactions(package, args); return MemPoolAccept(pool, active_chainstate).AcceptMultipleTransactions(package, args);
} else { } else {
auto args = MemPoolAccept::ATMPArgs::PackageChildWithParents(chainparams, GetTime(), coins_to_uncache, client_maxfeerate); auto args = MemPoolAccept::ATMPArgs::PackageChildWithParents(chainparams, GetTime(), coins_to_uncache, client_maxfeerate, ignore_rejects);
return MemPoolAccept(pool, active_chainstate).AcceptPackage(package, args); return MemPoolAccept(pool, active_chainstate).AcceptPackage(package, args);
} }
}(); }();

View File

@ -291,7 +291,7 @@ static inline MempoolAcceptResult AcceptToMemoryPool(Chainstate& active_chainsta
* possible for the package to be partially submitted. * possible for the package to be partially submitted.
*/ */
PackageMempoolAcceptResult ProcessNewPackage(Chainstate& active_chainstate, CTxMemPool& pool, PackageMempoolAcceptResult ProcessNewPackage(Chainstate& active_chainstate, CTxMemPool& pool,
const Package& txns, bool test_accept, const std::optional<CFeeRate>& client_maxfeerate) const Package& txns, bool test_accept, const std::optional<CFeeRate>& client_maxfeerate, const ignore_rejects_type& ignore_rejects=empty_ignore_rejects)
EXCLUSIVE_LOCKS_REQUIRED(cs_main); EXCLUSIVE_LOCKS_REQUIRED(cs_main);
/* Mempool validation helper functions */ /* Mempool validation helper functions */