@@ -2271,3 +2271,82 @@ func TestBaseTx(t *testing.T) {
2271
2271
require .NoError (baseTxBlock .Accept (context .Background ()))
2272
2272
require .NoError (vm .SetPreference (context .Background (), vm .manager .LastAccepted ()))
2273
2273
}
2274
+
2275
+ func TestPruneMempool (t * testing.T ) {
2276
+ require := require .New (t )
2277
+ vm , _ , _ := defaultVM (t , latestFork )
2278
+ vm .ctx .Lock .Lock ()
2279
+ defer func () {
2280
+ require .NoError (vm .Shutdown (context .Background ()))
2281
+ vm .ctx .Lock .Unlock ()
2282
+ }()
2283
+
2284
+ // Create a tx that will be valid regardless of timestamp.
2285
+ sendAmt := uint64 (100000 )
2286
+ changeAddr := ids .ShortEmpty
2287
+
2288
+ baseTx , err := vm .txBuilder .NewBaseTx (
2289
+ sendAmt ,
2290
+ secp256k1fx.OutputOwners {
2291
+ Threshold : 1 ,
2292
+ Addrs : []ids.ShortID {
2293
+ keys [1 ].Address (),
2294
+ },
2295
+ },
2296
+ []* secp256k1.PrivateKey {keys [0 ]},
2297
+ changeAddr ,
2298
+ )
2299
+ require .NoError (err )
2300
+
2301
+ vm .ctx .Lock .Unlock ()
2302
+ require .NoError (vm .issueTx (context .Background (), baseTx ))
2303
+ vm .ctx .Lock .Lock ()
2304
+
2305
+ // [baseTx] should be in the mempool.
2306
+ baseTxID := baseTx .ID ()
2307
+ _ , ok := vm .Builder .Get (baseTxID )
2308
+ require .True (ok )
2309
+
2310
+ // Create a tx that will be invalid after time advancement.
2311
+ var (
2312
+ startTime = vm .clock .Time ()
2313
+ endTime = startTime .Add (vm .MinStakeDuration )
2314
+ )
2315
+
2316
+ addValidatorTx , err := vm .txBuilder .NewAddValidatorTx (
2317
+ defaultMinValidatorStake ,
2318
+ uint64 (startTime .Unix ()),
2319
+ uint64 (endTime .Unix ()),
2320
+ ids .GenerateTestNodeID (),
2321
+ keys [2 ].Address (),
2322
+ 20000 ,
2323
+ []* secp256k1.PrivateKey {keys [1 ]},
2324
+ ids .ShortEmpty ,
2325
+ )
2326
+ require .NoError (err )
2327
+
2328
+ vm .ctx .Lock .Unlock ()
2329
+ require .NoError (vm .issueTx (context .Background (), addValidatorTx ))
2330
+ vm .ctx .Lock .Lock ()
2331
+
2332
+ // Advance clock to [endTime], making [addValidatorTx] invalid.
2333
+ vm .clock .Set (endTime )
2334
+
2335
+ // [addValidatorTx] and [baseTx] should still be in the mempool.
2336
+ addValidatorTxID := addValidatorTx .ID ()
2337
+ _ , ok = vm .Builder .Get (addValidatorTxID )
2338
+ require .True (ok )
2339
+ _ , ok = vm .Builder .Get (baseTxID )
2340
+ require .True (ok )
2341
+
2342
+ vm .ctx .Lock .Unlock ()
2343
+ require .NoError (vm .pruneMempool ())
2344
+ vm .ctx .Lock .Lock ()
2345
+
2346
+ // [addValidatorTx] should be ejected from the mempool.
2347
+ // [baseTx] should still be in the mempool.
2348
+ _ , ok = vm .Builder .Get (addValidatorTxID )
2349
+ require .False (ok )
2350
+ _ , ok = vm .Builder .Get (baseTxID )
2351
+ require .True (ok )
2352
+ }
0 commit comments