MOVEONLY: check for disjoint conflicts and ancestors to policy/rbf

This checks that a transaction isn't trying to replace something it
supposedly depends on.
This commit is contained in:
glozow
2021-07-27 15:55:25 +01:00
parent 7b60c02b7d
commit 3f033f01a6
3 changed files with 32 additions and 10 deletions

View File

@@ -112,3 +112,20 @@ std::optional<std::string> HasNoNewUnconfirmed(const CTransaction& tx,
}
return std::nullopt;
}
std::optional<std::string> EntriesAndTxidsDisjoint(const CTxMemPool::setEntries& setAncestors,
const std::set<uint256>& setConflicts,
const uint256& txid)
{
for (CTxMemPool::txiter ancestorIt : setAncestors)
{
const uint256 &hashAncestor = ancestorIt->GetTx().GetHash();
if (setConflicts.count(hashAncestor))
{
return strprintf("%s spends conflicting transaction %s",
txid.ToString(),
hashAncestor.ToString());
}
}
return std::nullopt;
}