mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-04-29 14:59:39 -04:00
Compare commits
6 commits
b6ab103372
...
1dfd7eecf1
Author | SHA1 | Date | |
---|---|---|---|
|
1dfd7eecf1 | ||
|
c5e44a0435 | ||
|
32d55e28af | ||
|
5702c4410d | ||
|
fd68e06908 | ||
|
0da2ae35c8 |
2 changed files with 38 additions and 6 deletions
|
@ -129,14 +129,34 @@ FUZZ_TARGET(mini_miner_selection, .init = initialize_miner)
|
|||
// Make a copy to preserve determinism.
|
||||
std::deque<COutPoint> available_coins = g_available_coins;
|
||||
std::vector<CTransactionRef> transactions;
|
||||
// The maximum block template size we expect to produce
|
||||
const auto block_adjusted_max_weight = MAX_BLOCK_WEIGHT - MINIMUM_BLOCK_RESERVED_WEIGHT;
|
||||
// When this is set to true we try to fill up the rest of the block with
|
||||
// a lot of small transactions so we can actually get close to actual
|
||||
// maximum block size
|
||||
std::optional<bool> min_size_tx{std::nullopt};
|
||||
// This decides if we target a larger, potentially full block or a smaller
|
||||
// block that will complete the test much faster
|
||||
bool use_limited_loop = fuzzed_data_provider.ConsumeBool();
|
||||
auto should_continue = [&]() -> bool {
|
||||
if (use_limited_loop) {
|
||||
return fuzzed_data_provider.ConsumeBool();
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
LOCK2(::cs_main, pool.cs);
|
||||
LIMITED_WHILE(fuzzed_data_provider.ConsumeBool(), 100)
|
||||
// Limited to 500 because of ClusterMempool DoS protection
|
||||
LIMITED_WHILE(should_continue(), 500)
|
||||
{
|
||||
CMutableTransaction mtx = CMutableTransaction();
|
||||
assert(!available_coins.empty());
|
||||
const size_t num_inputs = std::min(size_t{2}, available_coins.size());
|
||||
const size_t num_outputs = fuzzed_data_provider.ConsumeIntegralInRange<size_t>(2, 5);
|
||||
size_t num_inputs = std::min(size_t{2}, available_coins.size());
|
||||
size_t num_outputs = fuzzed_data_provider.ConsumeIntegralInRange<size_t>(50, 500);
|
||||
if (min_size_tx.has_value() && min_size_tx.value()) {
|
||||
num_inputs = fuzzed_data_provider.ConsumeIntegralInRange<size_t>(1, 5);
|
||||
num_outputs = fuzzed_data_provider.ConsumeIntegralInRange<size_t>(1, 5);
|
||||
}
|
||||
for (size_t n{0}; n < num_inputs; ++n) {
|
||||
auto prevout = available_coins.at(0);
|
||||
mtx.vin.emplace_back(prevout, CScript());
|
||||
|
@ -158,10 +178,17 @@ FUZZ_TARGET(mini_miner_selection, .init = initialize_miner)
|
|||
}
|
||||
}
|
||||
|
||||
const auto block_adjusted_max_weight = MAX_BLOCK_WEIGHT - DEFAULT_BLOCK_RESERVED_WEIGHT;
|
||||
// Stop if pool reaches block_adjusted_max_weight because BlockAssembler will stop when the
|
||||
// block template reaches that, but the MiniMiner will keep going.
|
||||
if (pool.GetTotalTxSize() + GetVirtualTransactionSize(*tx) >= block_adjusted_max_weight) break;
|
||||
if ((pool.GetTotalTxSize() + GetVirtualTransactionSize(*tx)) * 4 >= block_adjusted_max_weight) {
|
||||
// Either stop here or fill up the rest of the block with very small
|
||||
// transactions and break when the block is close to the possible max
|
||||
if (!min_size_tx.has_value()) {
|
||||
min_size_tx = fuzzed_data_provider.ConsumeBool();
|
||||
if (!min_size_tx.value()) break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
TestMemPoolEntryHelper entry;
|
||||
const CAmount fee{ConsumeMoney(fuzzed_data_provider, /*max=*/MAX_MONEY/100000)};
|
||||
assert(MoneyRange(fee));
|
||||
|
@ -184,6 +211,11 @@ FUZZ_TARGET(mini_miner_selection, .init = initialize_miner)
|
|||
node::BlockAssembler::Options miner_options;
|
||||
miner_options.blockMinFeeRate = target_feerate;
|
||||
miner_options.nBlockMaxWeight = MAX_BLOCK_WEIGHT;
|
||||
// Only setting reserved weight when necessary based on the template size
|
||||
const auto reserved_weight = MAX_BLOCK_WEIGHT - pool.GetTotalTxSize() * 4;
|
||||
if (reserved_weight < DEFAULT_BLOCK_RESERVED_WEIGHT) {
|
||||
miner_options.block_reserved_weight = reserved_weight - 1;
|
||||
}
|
||||
miner_options.test_block_validity = false;
|
||||
miner_options.coinbase_output_script = CScript() << OP_0;
|
||||
|
||||
|
|
|
@ -87,7 +87,7 @@ class BackwardsCompatibilityTest(BitcoinTestFramework):
|
|||
# 0.21.x and 22.x would both produce bad derivation paths when topping up an inactive hd chain
|
||||
# Make sure that this is being automatically cleaned up by migration
|
||||
node_master = self.nodes[1]
|
||||
node_v22 = self.nodes[self.num_nodes - 5]
|
||||
node_v22 = self.nodes[self.num_nodes - 3]
|
||||
wallet_name = "bad_deriv_path"
|
||||
node_v22.createwallet(wallet_name=wallet_name, descriptors=False)
|
||||
bad_deriv_wallet = node_v22.get_wallet_rpc(wallet_name)
|
||||
|
|
Loading…
Add table
Reference in a new issue