@@ -131,6 +131,53 @@ CTxMemPool MakeMempool(FuzzedDataProvider& fuzzed_data_provider, const NodeConte
131
131
return CTxMemPool{mempool_opts};
132
132
}
133
133
134
+ void CheckATMPInvariants (const MempoolAcceptResult& res, bool txid_in_mempool, bool wtxid_in_mempool)
135
+ {
136
+
137
+ switch (res.m_result_type ) {
138
+ case MempoolAcceptResult::ResultType::VALID:
139
+ {
140
+ Assert (txid_in_mempool);
141
+ Assert (wtxid_in_mempool);
142
+ Assert (res.m_state .IsValid ());
143
+ Assert (!res.m_state .IsInvalid ());
144
+ Assert (res.m_replaced_transactions );
145
+ Assert (res.m_vsize );
146
+ Assert (res.m_base_fees );
147
+ Assert (res.m_effective_feerate );
148
+ Assert (res.m_wtxids_fee_calculations );
149
+ Assert (!res.m_other_wtxid );
150
+ break ;
151
+ }
152
+ case MempoolAcceptResult::ResultType::INVALID:
153
+ {
154
+ // It may be already in the mempool since in ATMP cases we don't set MEMPOOL_ENTRY or DIFFERENT_WITNESS
155
+ Assert (!res.m_state .IsValid ());
156
+ Assert (res.m_state .IsInvalid ());
157
+ Assert (!res.m_replaced_transactions );
158
+ Assert (!res.m_vsize );
159
+ Assert (!res.m_base_fees );
160
+ // Unable or unwilling to calculate fees
161
+ Assert (!res.m_effective_feerate );
162
+ Assert (!res.m_wtxids_fee_calculations );
163
+ Assert (!res.m_other_wtxid );
164
+ break ;
165
+ }
166
+ case MempoolAcceptResult::ResultType::MEMPOOL_ENTRY:
167
+ {
168
+ // ATMP never sets this; only set in package settings
169
+ Assert (false );
170
+ break ;
171
+ }
172
+ case MempoolAcceptResult::ResultType::DIFFERENT_WITNESS:
173
+ {
174
+ // ATMP never sets this; only set in package settings
175
+ Assert (false );
176
+ break ;
177
+ }
178
+ }
179
+ }
180
+
134
181
FUZZ_TARGET (tx_pool_standard, .init = initialize_tx_pool)
135
182
{
136
183
FuzzedDataProvider fuzzed_data_provider (buffer.data (), buffer.size ());
@@ -258,9 +305,11 @@ FUZZ_TARGET(tx_pool_standard, .init = initialize_tx_pool)
258
305
SyncWithValidationInterfaceQueue ();
259
306
UnregisterSharedValidationInterface (txr);
260
307
308
+ bool txid_in_mempool = tx_pool.exists (GenTxid::Txid (tx->GetHash ()));
309
+ bool wtxid_in_mempool = tx_pool.exists (GenTxid::Wtxid (tx->GetWitnessHash ()));
310
+ CheckATMPInvariants (res, txid_in_mempool, wtxid_in_mempool);
311
+
261
312
Assert (accepted != added.empty ());
262
- Assert (accepted == res.m_state .IsValid ());
263
- Assert (accepted != res.m_state .IsInvalid ());
264
313
if (accepted) {
265
314
Assert (added.size () == 1 ); // For now, no package acceptance
266
315
Assert (tx == *added.begin ());
0 commit comments