@@ -378,3 +378,104 @@ func TestBuildBlocks(t *testing.T) {
378
378
}
379
379
require .Equal (t , uint64 (90 ), totalTxns )
380
380
}
381
+
382
+ func TestSepoliaBootstrap (t * testing.T ) {
383
+ mockCtrl := gomock .NewController (t )
384
+ bc := blockchain .New (pebble .NewMemTest (t ), & utils .Sepolia )
385
+ snData := mocks .NewMockStarknetData (mockCtrl )
386
+ p := mempool .New (pebble .NewMemTest (t ))
387
+ vmm := vm .New (utils .NewNopZapLogger ())
388
+ seqAddr := utils .HexToFelt (t , "0xDEADBEEF" )
389
+ privKey , err := ecdsa .GenerateKey (rand .Reader )
390
+ require .NoError (t , err )
391
+
392
+ blockTime := time .Second
393
+ testBuilder := builder .New (privKey , seqAddr , bc , vmm , blockTime , p , utils .NewNopZapLogger ()).
394
+ WithBootstrapToBlock (2 ).
395
+ WithStarknetData (snData ).
396
+ WithBootstrap (true )
397
+
398
+ client := feeder .NewTestClient (t , & utils .Sepolia )
399
+ gw := adaptfeeder .New (client )
400
+
401
+ var i uint64
402
+ var block * core.Block
403
+ var err2 error
404
+ for i = 0 ; i < 2 ; i ++ {
405
+ block , err2 = gw .BlockByNumber (context .Background (), i )
406
+ require .NoError (t , err2 )
407
+
408
+ su , err2 := gw .StateUpdate (context .Background (), i )
409
+ require .NoError (t , err2 )
410
+
411
+ snData .EXPECT ().BlockByNumber (context .Background (), i ).Return (block , nil )
412
+ snData .EXPECT ().StateUpdate (context .Background (), i ).Return (su , nil )
413
+ }
414
+ classHashes := []string {
415
+ "0x5c478ee27f2112411f86f207605b2e2c58cdb647bac0df27f660ef2252359c6" ,
416
+ "0xd0e183745e9dae3e4e78a8ffedcce0903fc4900beace4e0abf192d4c202da3" ,
417
+ "0x1b661756bf7d16210fc611626e1af4569baa1781ffc964bd018f4585ae241c1" ,
418
+ }
419
+
420
+ for _ , hash := range classHashes {
421
+ classHash := utils .HexToFelt (t , hash )
422
+ class , err2 := gw .Class (context .Background (), classHash )
423
+ require .NoError (t , err2 )
424
+ snData .EXPECT ().Class (context .Background (), classHash ).Return (class , nil )
425
+ }
426
+
427
+ t .Run ("Bootstrap" , func (t * testing.T ) {
428
+ err = testBuilder .BootstrapSeq (context .Background (), uint64 (2 ))
429
+ require .NoError (t , err )
430
+ head , err := bc .BlockByNumber (1 )
431
+ require .NoError (t , err )
432
+ require .Equal (t , uint64 (1 ), head .Number )
433
+ require .Equal (t , block .TransactionCount , head .TransactionCount , "TransactionCount diff" )
434
+ require .Equal (t , block .GlobalStateRoot .String (), head .GlobalStateRoot .String (), "GlobalStateRoot diff" )
435
+ })
436
+
437
+ t .Run ("Bootstrap blocks 0 and 1 + Run block 2" , func (t * testing.T ) {
438
+ block , err := gw .BlockByNumber (context .Background (), 2 )
439
+ require .NoError (t , err )
440
+ txns := block .Transactions
441
+ var mempoolTxns []* mempool.BroadcastedTransaction
442
+ for _ , txn := range txns {
443
+ switch tx := txn .(type ) {
444
+ case * core.DeployTransaction , * core.DeployAccountTransaction , * core.InvokeTransaction , * core.L1HandlerTransaction :
445
+ mempoolTxns = append (mempoolTxns ,
446
+ & mempool.BroadcastedTransaction {
447
+ Transaction : tx ,
448
+ })
449
+ case * core.DeclareTransaction :
450
+ class , err2 := gw .Class (context .Background (), tx .ClassHash )
451
+ require .NoError (t , err2 )
452
+ mempoolTxns = append (mempoolTxns , & mempool.BroadcastedTransaction {
453
+ Transaction : tx ,
454
+ DeclaredClass : class ,
455
+ })
456
+ default :
457
+ require .Error (t , errors .New ("unknown transaction type" ))
458
+ }
459
+ }
460
+
461
+ for _ , txn := range mempoolTxns {
462
+ err = p .Push (txn )
463
+ require .NoError (t , err )
464
+ }
465
+
466
+ ctx , cancel := context .WithTimeout (context .Background (), 2 * blockTime )
467
+ defer cancel ()
468
+ err = testBuilder .Run (ctx )
469
+ require .NoError (t , err )
470
+ head , err := bc .BlockByNumber (1 )
471
+ require .NoError (t , err )
472
+ require .Equal (t , uint64 (1 ), head .Number )
473
+ require .Equal (t , block .TransactionCount , head .TransactionCount , "TransactionCount diff" )
474
+ require .Equal (t , block .GlobalStateRoot .String (), head .GlobalStateRoot .String (), "GlobalStateRoot diff" )
475
+ head , err = bc .Head ()
476
+ require .NoError (t , err )
477
+ require .Equal (t , block .Number , head .Number )
478
+ require .Equal (t , block .TransactionCount , head .TransactionCount )
479
+ require .Equal (t , head .GlobalStateRoot , head .GlobalStateRoot )
480
+ })
481
+ }
0 commit comments