@@ -272,11 +272,13 @@ def open_trinitydb(location):
272
272
273
273
leveldb = LevelDB (db_path = Path (location ), max_open_files = 16 )
274
274
275
- if not db_already_existed :
276
- logger .info (f'Trinity database did not already exist, initializing it now' )
277
- chain = MainnetChain .from_genesis_header (leveldb , MAINNET_GENESIS_HEADER )
278
- else :
279
- chain = MainnetChain (leveldb )
275
+ if db_already_existed :
276
+ return MainnetChain (leveldb )
277
+
278
+ logger .info (f'Trinity database did not already exist, initializing it now' )
279
+ chain = MainnetChain .from_genesis_header (leveldb , MAINNET_GENESIS_HEADER )
280
+
281
+ # from_genesis_header copied the header over to our trinity db but not the state
280
282
281
283
return chain
282
284
@@ -421,6 +423,29 @@ def import_body_range(gethdb, chain, start_block, end_block):
421
423
previous_log_time = time .time ()
422
424
423
425
426
+ def process_blocks (gethdb , chain , end_block ):
427
+ "Imports blocks read out of the gethdb. Simulates a full sync but w/o network traffic"
428
+
429
+ canonical_head = chain .headerdb .get_canonical_head ()
430
+ logger .info (f'starting block processing from chain tip: { canonical_head } ' )
431
+
432
+ start_block = max (canonical_head .block_number , 1 )
433
+ for i in range (start_block , end_block + 1 ):
434
+ header_hash = gethdb .header_hash_for_block_number (i )
435
+ header = gethdb .block_header (i , header_hash )
436
+ vm_class = chain .get_vm_class (header )
437
+ block_class = vm_class .get_block_class ()
438
+ transaction_class = vm_class .get_transaction_class ()
439
+
440
+ body = gethdb .block_body (i )
441
+ transactions = [
442
+ transaction_class .from_base_transaction (txn ) for txn in body .transactions
443
+ ]
444
+ block = block_class (header , transactions , body .uncles )
445
+ imported_block , _ , _ = chain .import_block (block , perform_validation = True )
446
+ logger .debug ('imported block: {imported_block}' )
447
+
448
+
424
449
if __name__ == "__main__" :
425
450
logging .basicConfig (
426
451
level = logging .DEBUG ,
@@ -441,12 +466,19 @@ def import_body_range(gethdb, chain, start_block, end_block):
441
466
import_body_range_parser .add_argument ('-startblock' , type = int , required = True )
442
467
import_body_range_parser .add_argument ('-endblock' , type = int , required = True )
443
468
469
+ process_blocks_parser = subparsers .add_parser ('process_blocks' )
470
+ process_blocks_parser .add_argument ('-endblock' , type = int , required = True )
471
+
444
472
args = parser .parse_args ()
445
473
446
474
if args .command == 'import_body_range' :
447
475
gethdb = open_gethdb (args .gethdb )
448
476
chain = open_trinitydb (args .destdb )
449
477
import_body_range (gethdb , chain , args .startblock , args .endblock )
478
+ elif args .command == 'process_blocks' :
479
+ gethdb = open_gethdb (args .gethdb )
480
+ chain = open_trinitydb (args .destdb )
481
+ process_blocks (gethdb , chain , args .endblock )
450
482
else :
451
483
main (args )
452
484
0 commit comments