@@ -76,13 +76,21 @@ void SetMempoolConstraints(ArgsManager& args, FuzzedDataProvider& fuzzed_data_pr
76
76
ToString (fuzzed_data_provider.ConsumeIntegralInRange <unsigned >(0 , 999 )));
77
77
}
78
78
79
+ void MockTime (FuzzedDataProvider& fuzzed_data_provider, const CChainState& chainstate)
80
+ {
81
+ const auto time = ConsumeTime (fuzzed_data_provider,
82
+ chainstate.m_chain .Tip ()->GetMedianTimePast () + 1 ,
83
+ std::numeric_limits<decltype (chainstate.m_chain .Tip ()->nTime )>::max ());
84
+ SetMockTime (time);
85
+ }
86
+
79
87
FUZZ_TARGET_INIT (tx_pool_standard, initialize_tx_pool)
80
88
{
81
89
FuzzedDataProvider fuzzed_data_provider (buffer.data (), buffer.size ());
82
90
const auto & node = g_setup->m_node ;
83
91
auto & chainstate = node.chainman ->ActiveChainstate ();
84
92
85
- SetMockTime ( ConsumeTime ( fuzzed_data_provider) );
93
+ MockTime ( fuzzed_data_provider, chainstate );
86
94
SetMempoolConstraints (*node.args , fuzzed_data_provider);
87
95
88
96
// All RBF-spendable outpoints
@@ -161,7 +169,7 @@ FUZZ_TARGET_INIT(tx_pool_standard, initialize_tx_pool)
161
169
}();
162
170
163
171
if (fuzzed_data_provider.ConsumeBool ()) {
164
- SetMockTime ( ConsumeTime ( fuzzed_data_provider) );
172
+ MockTime ( fuzzed_data_provider, chainstate );
165
173
}
166
174
if (fuzzed_data_provider.ConsumeBool ()) {
167
175
SetMempoolConstraints (*node.args , fuzzed_data_provider);
@@ -262,6 +270,10 @@ FUZZ_TARGET_INIT(tx_pool, initialize_tx_pool)
262
270
{
263
271
FuzzedDataProvider fuzzed_data_provider (buffer.data (), buffer.size ());
264
272
const auto & node = g_setup->m_node ;
273
+ auto & chainstate = node.chainman ->ActiveChainstate ();
274
+
275
+ MockTime (fuzzed_data_provider, chainstate);
276
+ SetMempoolConstraints (*node.args , fuzzed_data_provider);
265
277
266
278
std::vector<uint256> txids;
267
279
for (const auto & outpoint : g_outpoints_coinbase_init_mature) {
@@ -273,12 +285,30 @@ FUZZ_TARGET_INIT(tx_pool, initialize_tx_pool)
273
285
txids.push_back (ConsumeUInt256 (fuzzed_data_provider));
274
286
}
275
287
276
- CTxMemPool tx_pool{/* estimator */ nullptr , /* check_ratio */ 1 };
288
+ CTxMemPool tx_pool_{/* estimator */ nullptr , /* check_ratio */ 1 };
289
+ MockedTxPool& tx_pool = *static_cast <MockedTxPool*>(&tx_pool_);
277
290
278
291
LIMITED_WHILE (fuzzed_data_provider.ConsumeBool (), 300 )
279
292
{
280
293
const auto mut_tx = ConsumeTransaction (fuzzed_data_provider, txids);
281
294
295
+ if (fuzzed_data_provider.ConsumeBool ()) {
296
+ MockTime (fuzzed_data_provider, chainstate);
297
+ }
298
+ if (fuzzed_data_provider.ConsumeBool ()) {
299
+ SetMempoolConstraints (*node.args , fuzzed_data_provider);
300
+ }
301
+ if (fuzzed_data_provider.ConsumeBool ()) {
302
+ tx_pool.RollingFeeUpdate ();
303
+ }
304
+ if (fuzzed_data_provider.ConsumeBool ()) {
305
+ const auto & txid = fuzzed_data_provider.ConsumeBool () ?
306
+ mut_tx.GetHash () :
307
+ PickValue (fuzzed_data_provider, txids);
308
+ const auto delta = fuzzed_data_provider.ConsumeIntegralInRange <CAmount>(-50 * COIN, +50 * COIN);
309
+ tx_pool.PrioritiseTransaction (txid, delta);
310
+ }
311
+
282
312
const auto tx = MakeTransactionRef (mut_tx);
283
313
const bool bypass_limits = fuzzed_data_provider.ConsumeBool ();
284
314
::fRequireStandard = fuzzed_data_provider.ConsumeBool ();
0 commit comments