Mempool: Do not enforce TRUC checks on reorg
Not enforcing TRUC topology on reorg was the intended behavior, but the appropriate bypass argument was not checked. This mistake means we could potentially invalidate a long chain of perfectly incentive-compatible transactions that were made historically, including subsequent non-TRUC transactions, all of which may have been very high feerate. Lastly, it wastes CPU cycles doing topology checks since this behavior cannot actually enforce the topology in general for the reorg setting.
This commit is contained in:
1 parent
bbe8e9063c
commit
26e71c237d
1 file changed
+2
@@ -1044,6 +1044,7 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws)
|
|||||||
// Even though just checking direct mempool parents for inheritance would be sufficient, we
|
// Even though just checking direct mempool parents for inheritance would be sufficient, we
|
||||||
// check using the full ancestor set here because it's more convenient to use what we have
|
// check using the full ancestor set here because it's more convenient to use what we have
|
||||||
// already calculated.
|
// already calculated.
|
||||||
|
if (!args.m_bypass_limits) {
|
||||||
if (const auto err{SingleTRUCChecks(ws.m_ptx, ws.m_ancestors, ws.m_conflicts, ws.m_vsize)}) {
|
if (const auto err{SingleTRUCChecks(ws.m_ptx, ws.m_ancestors, ws.m_conflicts, ws.m_vsize)}) {
|
||||||
// Single transaction contexts only.
|
// Single transaction contexts only.
|
||||||
if (args.m_allow_sibling_eviction && err->second != nullptr) {
|
if (args.m_allow_sibling_eviction && err->second != nullptr) {
|
||||||
@@ -1066,6 +1067,7 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws)
|
|||||||
return state.Invalid(TxValidationResult::TX_MEMPOOL_POLICY, "TRUC-violation", err->first);
|
return state.Invalid(TxValidationResult::TX_MEMPOOL_POLICY, "TRUC-violation", err->first);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// A transaction that spends outputs that would be replaced by it is invalid. Now
|
// A transaction that spends outputs that would be replaced by it is invalid. Now
|
||||||
// that we have the set of all ancestors we can detect this
|
// that we have the set of all ancestors we can detect this
|
||||||
|
|||||||
Reference in new issue
Block a user