@@ -77,13 +77,21 @@ void SetMempoolConstraints(ArgsManager& args, FuzzedDataProvider& fuzzed_data_pr
77
77
ToString (fuzzed_data_provider.ConsumeIntegralInRange <unsigned >(0 , 999 )));
78
78
}
79
79
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
+
80
88
FUZZ_TARGET_INIT (tx_pool_standard, initialize_tx_pool)
81
89
{
82
90
FuzzedDataProvider fuzzed_data_provider (buffer.data (), buffer.size ());
83
91
const auto & node = g_setup->m_node ;
84
92
auto & chainstate = node.chainman ->ActiveChainstate ();
85
93
86
- SetMockTime ( ConsumeTime ( fuzzed_data_provider) );
94
+ MockTime ( fuzzed_data_provider, chainstate );
87
95
SetMempoolConstraints (*node.args , fuzzed_data_provider);
88
96
89
97
// All RBF-spendable outpoints
@@ -163,7 +171,7 @@ FUZZ_TARGET_INIT(tx_pool_standard, initialize_tx_pool)
163
171
}();
164
172
165
173
if (fuzzed_data_provider.ConsumeBool ()) {
166
- SetMockTime ( ConsumeTime ( fuzzed_data_provider) );
174
+ MockTime ( fuzzed_data_provider, chainstate );
167
175
}
168
176
if (fuzzed_data_provider.ConsumeBool ()) {
169
177
SetMempoolConstraints (*node.args , fuzzed_data_provider);
@@ -254,6 +262,10 @@ FUZZ_TARGET_INIT(tx_pool, initialize_tx_pool)
254
262
{
255
263
FuzzedDataProvider fuzzed_data_provider (buffer.data (), buffer.size ());
256
264
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);
257
269
258
270
std::vector<uint256> txids;
259
271
for (const auto & outpoint : g_outpoints_coinbase_init_mature) {
@@ -265,11 +277,29 @@ FUZZ_TARGET_INIT(tx_pool, initialize_tx_pool)
265
277
txids.push_back (ConsumeUInt256 (fuzzed_data_provider));
266
278
}
267
279
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_);
269
282
270
283
while (fuzzed_data_provider.ConsumeBool ()) {
271
284
const auto mut_tx = ConsumeTransaction (fuzzed_data_provider, txids);
272
285
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
+
273
303
const auto tx = MakeTransactionRef (mut_tx);
274
304
const bool bypass_limits = fuzzed_data_provider.ConsumeBool ();
275
305
::fRequireStandard = fuzzed_data_provider.ConsumeBool ();
0 commit comments