@@ -102,12 +102,13 @@ BOOST_AUTO_TEST_CASE(MempoolRemoveTest)
102
102
removed.clear ();
103
103
}
104
104
105
+ template <int index>
105
106
void CheckSort (CTxMemPool &pool, std::vector<std::string> &sortedOrder)
106
107
{
107
108
BOOST_CHECK_EQUAL (pool.size (), sortedOrder.size ());
108
- CTxMemPool::indexed_transaction_set::nth_index<1 >::type::iterator it = pool.mapTx .get <1 >().begin ();
109
+ typename CTxMemPool::indexed_transaction_set::nth_index<index >::type::iterator it = pool.mapTx .get <index >().begin ();
109
110
int count=0 ;
110
- for (; it != pool.mapTx .get <1 >().end (); ++it, ++count) {
111
+ for (; it != pool.mapTx .get <index >().end (); ++it, ++count) {
111
112
BOOST_CHECK_EQUAL (it->GetTx ().GetHash ().ToString (), sortedOrder[count]);
112
113
}
113
114
}
@@ -163,7 +164,7 @@ BOOST_AUTO_TEST_CASE(MempoolIndexingTest)
163
164
sortedOrder[2 ] = tx1.GetHash ().ToString (); // 10000
164
165
sortedOrder[3 ] = tx4.GetHash ().ToString (); // 15000
165
166
sortedOrder[4 ] = tx2.GetHash ().ToString (); // 20000
166
- CheckSort (pool, sortedOrder);
167
+ CheckSort< 1 > (pool, sortedOrder);
167
168
168
169
/* low fee but with high fee child */
169
170
/* tx6 -> tx7 -> tx8, tx9 -> tx10 */
@@ -175,7 +176,7 @@ BOOST_AUTO_TEST_CASE(MempoolIndexingTest)
175
176
BOOST_CHECK_EQUAL (pool.size (), 6 );
176
177
// Check that at this point, tx6 is sorted low
177
178
sortedOrder.insert (sortedOrder.begin (), tx6.GetHash ().ToString ());
178
- CheckSort (pool, sortedOrder);
179
+ CheckSort< 1 > (pool, sortedOrder);
179
180
180
181
CTxMemPool::setEntries setAncestors;
181
182
setAncestors.insert (pool.mapTx .find (tx6.GetHash ()));
@@ -201,7 +202,7 @@ BOOST_AUTO_TEST_CASE(MempoolIndexingTest)
201
202
sortedOrder.erase (sortedOrder.begin ());
202
203
sortedOrder.push_back (tx6.GetHash ().ToString ());
203
204
sortedOrder.push_back (tx7.GetHash ().ToString ());
204
- CheckSort (pool, sortedOrder);
205
+ CheckSort< 1 > (pool, sortedOrder);
205
206
206
207
/* low fee child of tx7 */
207
208
CMutableTransaction tx8 = CMutableTransaction ();
@@ -216,7 +217,7 @@ BOOST_AUTO_TEST_CASE(MempoolIndexingTest)
216
217
217
218
// Now tx8 should be sorted low, but tx6/tx both high
218
219
sortedOrder.insert (sortedOrder.begin (), tx8.GetHash ().ToString ());
219
- CheckSort (pool, sortedOrder);
220
+ CheckSort< 1 > (pool, sortedOrder);
220
221
221
222
/* low fee child of tx7 */
222
223
CMutableTransaction tx9 = CMutableTransaction ();
@@ -231,7 +232,7 @@ BOOST_AUTO_TEST_CASE(MempoolIndexingTest)
231
232
// tx9 should be sorted low
232
233
BOOST_CHECK_EQUAL (pool.size (), 9 );
233
234
sortedOrder.insert (sortedOrder.begin (), tx9.GetHash ().ToString ());
234
- CheckSort (pool, sortedOrder);
235
+ CheckSort< 1 > (pool, sortedOrder);
235
236
236
237
std::vector<std::string> snapshotOrder = sortedOrder;
237
238
@@ -273,17 +274,50 @@ BOOST_AUTO_TEST_CASE(MempoolIndexingTest)
273
274
sortedOrder.insert (sortedOrder.begin ()+5 , tx9.GetHash ().ToString ());
274
275
sortedOrder.insert (sortedOrder.begin ()+6 , tx8.GetHash ().ToString ());
275
276
sortedOrder.insert (sortedOrder.begin ()+7 , tx10.GetHash ().ToString ()); // tx10 is just before tx6
276
- CheckSort (pool, sortedOrder);
277
+ CheckSort< 1 > (pool, sortedOrder);
277
278
278
279
// there should be 10 transactions in the mempool
279
280
BOOST_CHECK_EQUAL (pool.size (), 10 );
280
281
281
282
// Now try removing tx10 and verify the sort order returns to normal
282
283
std::list<CTransaction> removed;
283
284
pool.remove (pool.mapTx .find (tx10.GetHash ())->GetTx (), removed, true );
284
- CheckSort (pool, snapshotOrder);
285
+ CheckSort<1 >(pool, snapshotOrder);
286
+
287
+ pool.remove (pool.mapTx .find (tx9.GetHash ())->GetTx (), removed, true );
288
+ pool.remove (pool.mapTx .find (tx8.GetHash ())->GetTx (), removed, true );
289
+ /* Now check the sort on the mining score index.
290
+ * Final order should be:
291
+ *
292
+ * tx7 (2M)
293
+ * tx2 (20k)
294
+ * tx4 (15000)
295
+ * tx1/tx5 (10000)
296
+ * tx3/6 (0)
297
+ * (Ties resolved by hash)
298
+ */
299
+ sortedOrder.clear ();
300
+ sortedOrder.push_back (tx7.GetHash ().ToString ());
301
+ sortedOrder.push_back (tx2.GetHash ().ToString ());
302
+ sortedOrder.push_back (tx4.GetHash ().ToString ());
303
+ if (tx1.GetHash () < tx5.GetHash ()) {
304
+ sortedOrder.push_back (tx5.GetHash ().ToString ());
305
+ sortedOrder.push_back (tx1.GetHash ().ToString ());
306
+ } else {
307
+ sortedOrder.push_back (tx1.GetHash ().ToString ());
308
+ sortedOrder.push_back (tx5.GetHash ().ToString ());
309
+ }
310
+ if (tx3.GetHash () < tx6.GetHash ()) {
311
+ sortedOrder.push_back (tx6.GetHash ().ToString ());
312
+ sortedOrder.push_back (tx3.GetHash ().ToString ());
313
+ } else {
314
+ sortedOrder.push_back (tx3.GetHash ().ToString ());
315
+ sortedOrder.push_back (tx6.GetHash ().ToString ());
316
+ }
317
+ CheckSort<3 >(pool, sortedOrder);
285
318
}
286
319
320
+
287
321
BOOST_AUTO_TEST_CASE (MempoolSizeLimitTest)
288
322
{
289
323
CTxMemPool pool (CFeeRate (1000 ));
0 commit comments