mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-06-02 09:15:04 +02:00
Merge bitcoin/bitcoin#28391: refactor: Simplify CTxMempool/BlockAssembler fields, remove some external mapTx access
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
This commit is contained in:
@@ -94,7 +94,7 @@ BOOST_FIXTURE_TEST_CASE(miniminer_negative, TestChain100Setup)
|
||||
const CFeeRate feerate_zero(0);
|
||||
mini_miner_target0.BuildMockTemplate(feerate_zero);
|
||||
// Check the quit condition:
|
||||
BOOST_CHECK(negative_modified_fees < feerate_zero.GetFee(pool.GetIter(tx_mod_negative->GetHash()).value()->GetTxSize()));
|
||||
BOOST_CHECK(negative_modified_fees < feerate_zero.GetFee(Assert(pool.GetEntry(tx_mod_negative->GetHash()))->GetTxSize()));
|
||||
BOOST_CHECK(mini_miner_target0.GetMockTemplateTxids().empty());
|
||||
|
||||
// With no target feerate, the template includes all transactions, even negative feerate ones.
|
||||
@@ -179,9 +179,9 @@ BOOST_FIXTURE_TEST_CASE(miniminer_1p1c, TestChain100Setup)
|
||||
};
|
||||
std::map<uint256, TxDimensions> tx_dims;
|
||||
for (const auto& tx : all_transactions) {
|
||||
const auto it = pool.GetIter(tx->GetHash()).value();
|
||||
tx_dims.emplace(tx->GetHash(), TxDimensions{it->GetTxSize(), it->GetModifiedFee(),
|
||||
CFeeRate(it->GetModifiedFee(), it->GetTxSize())});
|
||||
const auto& entry{*Assert(pool.GetEntry(tx->GetHash()))};
|
||||
tx_dims.emplace(tx->GetHash(), TxDimensions{entry.GetTxSize(), entry.GetModifiedFee(),
|
||||
CFeeRate(entry.GetModifiedFee(), entry.GetTxSize())});
|
||||
}
|
||||
|
||||
const std::vector<CFeeRate> various_normal_feerates({CFeeRate(0), CFeeRate(500), CFeeRate(999),
|
||||
@@ -447,15 +447,15 @@ BOOST_FIXTURE_TEST_CASE(miniminer_overlap, TestChain100Setup)
|
||||
// tx3's feerate is lower than tx2's. same fee, different weight.
|
||||
BOOST_CHECK(tx2_feerate > tx3_feerate);
|
||||
const auto tx3_anc_feerate = CFeeRate(low_fee + med_fee + high_fee + high_fee, tx_vsizes[0] + tx_vsizes[1] + tx_vsizes[2] + tx_vsizes[3]);
|
||||
const auto tx3_iter = pool.GetIter(tx3->GetHash());
|
||||
BOOST_CHECK(tx3_anc_feerate == CFeeRate(tx3_iter.value()->GetModFeesWithAncestors(), tx3_iter.value()->GetSizeWithAncestors()));
|
||||
const auto& tx3_entry{*Assert(pool.GetEntry(tx3->GetHash()))};
|
||||
BOOST_CHECK(tx3_anc_feerate == CFeeRate(tx3_entry.GetModFeesWithAncestors(), tx3_entry.GetSizeWithAncestors()));
|
||||
const auto tx4_feerate = CFeeRate(high_fee, tx_vsizes[4]);
|
||||
const auto tx6_anc_feerate = CFeeRate(high_fee + low_fee + med_fee, tx_vsizes[4] + tx_vsizes[5] + tx_vsizes[6]);
|
||||
const auto tx6_iter = pool.GetIter(tx6->GetHash());
|
||||
BOOST_CHECK(tx6_anc_feerate == CFeeRate(tx6_iter.value()->GetModFeesWithAncestors(), tx6_iter.value()->GetSizeWithAncestors()));
|
||||
const auto& tx6_entry{*Assert(pool.GetEntry(tx6->GetHash()))};
|
||||
BOOST_CHECK(tx6_anc_feerate == CFeeRate(tx6_entry.GetModFeesWithAncestors(), tx6_entry.GetSizeWithAncestors()));
|
||||
const auto tx7_anc_feerate = CFeeRate(high_fee + low_fee + high_fee, tx_vsizes[4] + tx_vsizes[5] + tx_vsizes[7]);
|
||||
const auto tx7_iter = pool.GetIter(tx7->GetHash());
|
||||
BOOST_CHECK(tx7_anc_feerate == CFeeRate(tx7_iter.value()->GetModFeesWithAncestors(), tx7_iter.value()->GetSizeWithAncestors()));
|
||||
const auto& tx7_entry{*Assert(pool.GetEntry(tx7->GetHash()))};
|
||||
BOOST_CHECK(tx7_anc_feerate == CFeeRate(tx7_entry.GetModFeesWithAncestors(), tx7_entry.GetSizeWithAncestors()));
|
||||
BOOST_CHECK(tx4_feerate > tx6_anc_feerate);
|
||||
BOOST_CHECK(tx4_feerate > tx7_anc_feerate);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user