Browse Source

Merge pull request #4575

ad08d0b Bugfix: make CCoinsViewMemPool support pruned entries in underlying cache (Pieter Wuille)
0.10
Wladimir J. van der Laan 10 years ago
parent
commit
7eb3d6152f
No known key found for this signature in database
GPG Key ID: 74810B012346C9A6
  1. 7
      src/txmempool.cpp

7
src/txmempool.cpp

@ -602,14 +602,15 @@ void CTxMemPool::ClearPrioritisation(const uint256 hash)
CCoinsViewMemPool::CCoinsViewMemPool(CCoinsView &baseIn, CTxMemPool &mempoolIn) : CCoinsViewBacked(baseIn), mempool(mempoolIn) { } CCoinsViewMemPool::CCoinsViewMemPool(CCoinsView &baseIn, CTxMemPool &mempoolIn) : CCoinsViewBacked(baseIn), mempool(mempoolIn) { }
bool CCoinsViewMemPool::GetCoins(const uint256 &txid, CCoins &coins) { bool CCoinsViewMemPool::GetCoins(const uint256 &txid, CCoins &coins) {
if (base->GetCoins(txid, coins)) // If an entry in the mempool exists, always return that one, as it's guaranteed to never
return true; // conflict with the underlying cache, and it cannot have pruned entries (as it contains full)
// transactions. First checking the underlying cache risks returning a pruned entry instead.
CTransaction tx; CTransaction tx;
if (mempool.lookup(txid, tx)) { if (mempool.lookup(txid, tx)) {
coins = CCoins(tx, MEMPOOL_HEIGHT); coins = CCoins(tx, MEMPOOL_HEIGHT);
return true; return true;
} }
return false; return (base->GetCoins(txid, coins) && !coins.IsPruned());
} }
bool CCoinsViewMemPool::HaveCoins(const uint256 &txid) { bool CCoinsViewMemPool::HaveCoins(const uint256 &txid) {

Loading…
Cancel
Save