mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-25 18:53:23 -03:00
validation: Pass in chainstate to CTxMemPool::check
This is the only instance where validation reaches for something outside of it.
This commit is contained in:
parent
1fb7b2c595
commit
4744efc9ba
4 changed files with 11 additions and 8 deletions
|
@ -2301,7 +2301,7 @@ void PeerManagerImpl::ProcessOrphanTx(std::set<uint256>& orphan_work_set)
|
|||
break;
|
||||
}
|
||||
}
|
||||
m_mempool.check(&::ChainstateActive().CoinsTip());
|
||||
m_mempool.check(m_chainman.ActiveChainstate());
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -3262,7 +3262,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
|
|||
const TxValidationState& state = result.m_state;
|
||||
|
||||
if (result.m_result_type == MempoolAcceptResult::ResultType::VALID) {
|
||||
m_mempool.check(&::ChainstateActive().CoinsTip());
|
||||
m_mempool.check(m_chainman.ActiveChainstate());
|
||||
// As this version of the transaction was acceptable, we can forget about any
|
||||
// requests for it.
|
||||
m_txrequest.ForgetTxHash(tx.GetHash());
|
||||
|
|
|
@ -619,7 +619,7 @@ static void CheckInputsAndUpdateCoins(const CTransaction& tx, CCoinsViewCache& m
|
|||
UpdateCoins(tx, mempoolDuplicate, std::numeric_limits<int>::max());
|
||||
}
|
||||
|
||||
void CTxMemPool::check(const CCoinsViewCache *pcoins) const
|
||||
void CTxMemPool::check(CChainState& active_chainstate) const
|
||||
{
|
||||
if (m_check_ratio == 0) return;
|
||||
|
||||
|
@ -633,8 +633,11 @@ void CTxMemPool::check(const CCoinsViewCache *pcoins) const
|
|||
CAmount check_total_fee{0};
|
||||
uint64_t innerUsage = 0;
|
||||
|
||||
CCoinsViewCache mempoolDuplicate(const_cast<CCoinsViewCache*>(pcoins));
|
||||
const int64_t spendheight = g_chainman.m_blockman.GetSpendHeight(mempoolDuplicate);
|
||||
CCoinsViewCache& active_coins_tip = active_chainstate.CoinsTip();
|
||||
assert(std::addressof(::ChainstateActive().CoinsTip()) == std::addressof(active_coins_tip)); // TODO: REVIEW-ONLY, REMOVE IN FUTURE COMMIT
|
||||
CCoinsViewCache mempoolDuplicate(const_cast<CCoinsViewCache*>(&active_coins_tip));
|
||||
const int64_t spendheight = active_chainstate.m_chain.Height() + 1;
|
||||
assert(g_chainman.m_blockman.GetSpendHeight(mempoolDuplicate) == spendheight); // TODO: REVIEW-ONLY, REMOVE IN FUTURE COMMIT
|
||||
|
||||
std::list<const CTxMemPoolEntry*> waitingOnDependants;
|
||||
for (indexed_transaction_set::const_iterator it = mapTx.begin(); it != mapTx.end(); it++) {
|
||||
|
@ -655,7 +658,7 @@ void CTxMemPool::check(const CCoinsViewCache *pcoins) const
|
|||
fDependsWait = true;
|
||||
setParentCheck.insert(*it2);
|
||||
} else {
|
||||
assert(pcoins->HaveCoin(txin.prevout));
|
||||
assert(active_coins_tip.HaveCoin(txin.prevout));
|
||||
}
|
||||
// Check whether its inputs are marked in mapNextTx.
|
||||
auto it3 = mapNextTx.find(txin.prevout);
|
||||
|
|
|
@ -604,7 +604,7 @@ public:
|
|||
* all inputs are in the mapNextTx array). If sanity-checking is turned off,
|
||||
* check does nothing.
|
||||
*/
|
||||
void check(const CCoinsViewCache *pcoins) const EXCLUSIVE_LOCKS_REQUIRED(::cs_main);
|
||||
void check(CChainState& active_chainstate) const EXCLUSIVE_LOCKS_REQUIRED(::cs_main);
|
||||
|
||||
// addUnchecked must updated state for all ancestors of a given transaction,
|
||||
// to track size/count of descendant transactions. First version of
|
||||
|
|
|
@ -2799,7 +2799,7 @@ bool CChainState::ActivateBestChainStep(BlockValidationState& state, const CChai
|
|||
// any disconnected transactions back to the mempool.
|
||||
UpdateMempoolForReorg(::ChainstateActive(), m_mempool, disconnectpool, true);
|
||||
}
|
||||
m_mempool.check(&CoinsTip());
|
||||
m_mempool.check(*this);
|
||||
|
||||
CheckForkWarningConditions();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue