Cache tx Trust per-call to avoid DoS

This commit is contained in:
Jeremy Rubin committed 2019-10-21 13:16:22 -07:00
1 parent dce032ce29
commit 595f09d6de
2 files changed
+12 -1

No files matched your search

+11 -1
View File
@@ -2294,6 +2294,12 @@ bool CWalletTx::InMempool() const
}
bool CWalletTx::IsTrusted(interfaces::Chain::Lock& locked_chain) const
{
std::set<uint256> s;
return IsTrusted(locked_chain, s);
}
bool CWalletTx::IsTrusted(interfaces::Chain::Lock& locked_chain, std::set<uint256>& trustedParents) const
{
// Quick answer in most cases
if (!locked_chain.checkFinalTx(*tx)) {
@@ -2322,9 +2328,13 @@ bool CWalletTx::IsTrusted(interfaces::Chain::Lock& locked_chain) const
// Check that this specific input being spent is trusted
if (pwallet->IsMine(parentOut) != ISMINE_SPENDABLE)
return false;
// If we've already trusted this parent, continue
if (trustedParents.count(parent->GetHash()))
continue;
// Recurse to check that the parent is also trusted
if (!parent->IsTrusted(locked_chain))
if (!parent->IsTrusted(locked_chain, trustedParents))
return false;
trustedParents.insert(parent->GetHash());
}
return true;
}
+1
View File
@@ -616,6 +616,7 @@ public:
bool InMempool() const;
bool IsTrusted(interfaces::Chain::Lock& locked_chain) const;
bool IsTrusted(interfaces::Chain::Lock& locked_chain, std::set<uint256>& trustedParents) const;
int64_t GetTxTime() const;