Merge bitcoin/bitcoin#31457: fuzz: Speed up *_package_eval fuzz targets a bit

fac3d93c2ba84899c2c6516b5449f61ef653d9fa fuzz: Speed up *_package_eval fuzz targets a bit (MarcoFalke)
fa40fd043ab23eb8948c208ca82f75f3d40bb2e4 fuzz: [refactor] Avoid confusing c-style cast (MarcoFalke)

Pull request description:

  Each target is at least 10% faster for me when running over the current set of qa-assets, which seems nice.

  The changes `outpoints_value` from a map to an unordered map, which is safe, because the element order is not used in the fuzz test and the map is only used for lookup.

  (`mempool_outpoints` can't be changed, because the order matters here. Using unordered_set here may result in a non-deterministic fuzz target, given the same fuzz input.)

ACKs for top commit:
  l0rinc:
    ACK fac3d93c2ba84899c2c6516b5449f61ef653d9fa
  dergoegge:
    Code review ACK fac3d93c2ba84899c2c6516b5449f61ef653d9fa

Tree-SHA512: 8ae5d4e281505aff76a4003d6e9ea388dbb73860e167385bd6a0a201b3acc939db29ee212594952a9e80e85b3cc4cd726ce6dd49551f74013cb4da8a15cbdfb3
This commit is contained in:
merge-script 2025-03-20 13:06:17 +08:00
commit ef525e8b7c
No known key found for this signature in database
GPG Key ID: 2EEB9F5CC09526C1

View File

@ -201,7 +201,7 @@ FUZZ_TARGET(ephemeral_package_eval, .init = initialize_tx_pool)
// All RBF-spendable outpoints outside of the unsubmitted package
std::set<COutPoint> mempool_outpoints;
std::map<COutPoint, CAmount> outpoints_value;
std::unordered_map<COutPoint, CAmount, SaltedOutpointHasher> outpoints_value;
for (const auto& outpoint : g_outpoints_coinbase_init_mature) {
Assert(mempool_outpoints.insert(outpoint).second);
outpoints_value[outpoint] = 50 * COIN;
@ -225,7 +225,7 @@ FUZZ_TARGET(ephemeral_package_eval, .init = initialize_tx_pool)
std::optional<COutPoint> outpoint_to_rbf{fuzzed_data_provider.ConsumeBool() ? GetChildEvictingPrevout(tx_pool) : std::nullopt};
// Make small packages
const auto num_txs = outpoint_to_rbf ? 1 : (size_t) fuzzed_data_provider.ConsumeIntegralInRange<int>(1, 4);
const auto num_txs = outpoint_to_rbf ? 1 : fuzzed_data_provider.ConsumeIntegralInRange<size_t>(1, 4);
std::set<COutPoint> package_outpoints;
while (txs.size() < num_txs) {
@ -356,7 +356,7 @@ FUZZ_TARGET(tx_package_eval, .init = initialize_tx_pool)
// All RBF-spendable outpoints outside of the unsubmitted package
std::set<COutPoint> mempool_outpoints;
std::map<COutPoint, CAmount> outpoints_value;
std::unordered_map<COutPoint, CAmount, SaltedOutpointHasher> outpoints_value;
for (const auto& outpoint : g_outpoints_coinbase_init_mature) {
Assert(mempool_outpoints.insert(outpoint).second);
outpoints_value[outpoint] = 50 * COIN;
@ -377,7 +377,7 @@ FUZZ_TARGET(tx_package_eval, .init = initialize_tx_pool)
std::vector<CTransactionRef> txs;
// Make packages of 1-to-26 transactions
const auto num_txs = (size_t) fuzzed_data_provider.ConsumeIntegralInRange<int>(1, 26);
const auto num_txs = fuzzed_data_provider.ConsumeIntegralInRange<size_t>(1, 26);
std::set<COutPoint> package_outpoints;
while (txs.size() < num_txs) {
// Create transaction to add to the mempool