Skip to content

Commit fa61ce5

Browse files
author
MarcoFalke
committed
fuzz: Limit mocktime to MTP in tx_pool targets
This is needed for the next commit to generate blocks. Also, apply the same mocking strategies to both targets.
1 parent fab646b commit fa61ce5

File tree

1 file changed

+33
-3
lines changed

1 file changed

+33
-3
lines changed

src/test/fuzz/tx_pool.cpp

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,21 @@ void SetMempoolConstraints(ArgsManager& args, FuzzedDataProvider& fuzzed_data_pr
7777
ToString(fuzzed_data_provider.ConsumeIntegralInRange<unsigned>(0, 999)));
7878
}
7979

80+
void MockTime(FuzzedDataProvider& fuzzed_data_provider, const CChainState& chainstate)
81+
{
82+
const auto time = ConsumeTime(fuzzed_data_provider,
83+
chainstate.m_chain.Tip()->GetMedianTimePast() + 1,
84+
std::numeric_limits<decltype(chainstate.m_chain.Tip()->nTime)>::max());
85+
SetMockTime(time);
86+
}
87+
8088
FUZZ_TARGET_INIT(tx_pool_standard, initialize_tx_pool)
8189
{
8290
FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
8391
const auto& node = g_setup->m_node;
8492
auto& chainstate = node.chainman->ActiveChainstate();
8593

86-
SetMockTime(ConsumeTime(fuzzed_data_provider));
94+
MockTime(fuzzed_data_provider, chainstate);
8795
SetMempoolConstraints(*node.args, fuzzed_data_provider);
8896

8997
// All RBF-spendable outpoints
@@ -163,7 +171,7 @@ FUZZ_TARGET_INIT(tx_pool_standard, initialize_tx_pool)
163171
}();
164172

165173
if (fuzzed_data_provider.ConsumeBool()) {
166-
SetMockTime(ConsumeTime(fuzzed_data_provider));
174+
MockTime(fuzzed_data_provider, chainstate);
167175
}
168176
if (fuzzed_data_provider.ConsumeBool()) {
169177
SetMempoolConstraints(*node.args, fuzzed_data_provider);
@@ -254,6 +262,10 @@ FUZZ_TARGET_INIT(tx_pool, initialize_tx_pool)
254262
{
255263
FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
256264
const auto& node = g_setup->m_node;
265+
auto& chainstate = node.chainman->ActiveChainstate();
266+
267+
MockTime(fuzzed_data_provider, chainstate);
268+
SetMempoolConstraints(*node.args, fuzzed_data_provider);
257269

258270
std::vector<uint256> txids;
259271
for (const auto& outpoint : g_outpoints_coinbase_init_mature) {
@@ -265,11 +277,29 @@ FUZZ_TARGET_INIT(tx_pool, initialize_tx_pool)
265277
txids.push_back(ConsumeUInt256(fuzzed_data_provider));
266278
}
267279

268-
CTxMemPool tx_pool{/* estimator */ nullptr, /* check_ratio */ 1};
280+
CTxMemPool tx_pool_{/* estimator */ nullptr, /* check_ratio */ 1};
281+
MockedTxPool& tx_pool = *static_cast<MockedTxPool*>(&tx_pool_);
269282

270283
while (fuzzed_data_provider.ConsumeBool()) {
271284
const auto mut_tx = ConsumeTransaction(fuzzed_data_provider, txids);
272285

286+
if (fuzzed_data_provider.ConsumeBool()) {
287+
MockTime(fuzzed_data_provider, chainstate);
288+
}
289+
if (fuzzed_data_provider.ConsumeBool()) {
290+
SetMempoolConstraints(*node.args, fuzzed_data_provider);
291+
}
292+
if (fuzzed_data_provider.ConsumeBool()) {
293+
tx_pool.RollingFeeUpdate();
294+
}
295+
if (fuzzed_data_provider.ConsumeBool()) {
296+
const auto& txid = fuzzed_data_provider.ConsumeBool() ?
297+
mut_tx.GetHash() :
298+
PickValue(fuzzed_data_provider, txids);
299+
const auto delta = fuzzed_data_provider.ConsumeIntegralInRange<CAmount>(-50 * COIN, +50 * COIN);
300+
tx_pool.PrioritiseTransaction(txid, delta);
301+
}
302+
273303
const auto tx = MakeTransactionRef(mut_tx);
274304
const bool bypass_limits = fuzzed_data_provider.ConsumeBool();
275305
::fRequireStandard = fuzzed_data_provider.ConsumeBool();

0 commit comments

Comments
 (0)