4dd94ca18f[refactor] remove access to mapTx in validation_block_tests (TheCharlatan)d0cd2e804e[refactor] rewrite BlockAssembler inBlock and failedTx as sets of txids (glozow)55b0939cabscripted-diff: rename vTxHashes to txns_randomized (TheCharlatan)a03aef9cec[refactor] rewrite vTxHashes as a vector of CTransactionRef (glozow)938643c3b2[refactor] remove access to mapTx in validation.cpp (glozow)333367a940[txmempool] make CTxMemPoolEntry::lockPoints mutable (glozow)1bf4855016[refactor] use CheckPackageLimits for checkChainLimits (glozow)dbc5bdbf59[refactor] remove access to mapTx.find in mempool_tests.cpp (glozow)f80909e7a3[refactor] remove access to mapTx in blockencodings_tests.cpp (glozow)8892d6b744[refactor] remove access to mapTx from rpc/mempool.cpp (glozow)fad61aa561[refactor] get wtxid from entry instead of vTxHashes (glozow)9cd8cafb77[refactor] use exists() instead of mapTx.find() (glozow)14804699e5[refactor] remove access to mapTx from policy/rbf.cpp (glozow)1c6a73abbd[refactor] Add helper for retrieving mempool entry (TheCharlatan)453b4813eb[refactor] Add helper for iterating through mempool entries (stickies-v) Pull request description: Motivation * It seems preferable to use stdlib data structures instead of boost if they can achieve close to the same thing. * Code external to mempool should ideally use its public helper methods instead of accessing `mapTx` or its iterators directly. * Reduce the number of complex boost multi index type interactions * Also see #28335 for further context/motivation. This PR together with #28385 simplifies that one. Overview of things done in this PR: * Make `vTxHashes` a vector of transaction references instead of a pair of transaction hash and iterator. The trade off here is that the data is retrieved on the fly with `GetEntry` instead of being cached in `vTxHashes`. * Introduce `GetEntry` helper method to replace the more involved `GetIter` where applicable * Replace `mapTx` access with `CTxMemPool` helper methods * Simplify `checkChainLimits` call in `node/interfaces.cpp` * Make `CTxMemPoolEntry`s `lockPoints`mutable such that they can be changed with a const iterator directly instead of going through `mapTx` * Make `BlockAssembler`'s `inBlock` and `failedTx` sets of transaction hashes. ACKs for top commit: glozow: reACK4dd94camaflcko: re-ACK4dd94ca18f👝 stickies-v: re-ACK4dd94ca18fTree-SHA512: c4d043f2186e4fde337591883fac66cade3058173987b49502bd65cecf69207a3df1077f6626809652ab63230013167b7f39a2b39f1c5166959e5495df57065f
src/node/
The src/node/ directory contains code that needs to access node state
(state in CChain, CBlockIndex, CCoinsView, CTxMemPool, and similar
classes).
Code in src/node/ is meant to be segregated from code in
src/wallet/ and src/qt/, to ensure wallet and GUI
code changes don't interfere with node operation, to allow wallet and GUI code
to run in separate processes, and to perhaps eventually allow wallet and GUI
code to be maintained in separate source repositories.
As a rule of thumb, code in one of the src/node/,
src/wallet/, or src/qt/ directories should avoid
calling code in the other directories directly, and only invoke it indirectly
through the more limited src/interfaces/ classes.
This directory is at the moment
sparsely populated. Eventually more substantial files like
src/validation.cpp and
src/txmempool.cpp might be moved there.