@@ -570,12 +570,17 @@ func (ob *Observer) BlockByNumber(blockNumber int) (*ethrpc.Block, error) {
570
570
return block , nil
571
571
}
572
572
573
- func (ob * Observer ) BuildLastBlock () error {
574
- logger := ob .logger .Chain .With ().Str ("module" , "BuildBlockIndex" ).Logger ()
573
+ // LoadLastScannedBlock loads last scanned block from specified height or from database
574
+ // The last scanned block is the height from which the observer should continue scanning for inbound transactions
575
+ func (ob * Observer ) LoadLastScannedBlock () error {
576
+ // get environment variable
575
577
envvar := ob .chain .ChainName .String () + "_SCAN_FROM"
576
578
scanFromBlock := os .Getenv (envvar )
579
+
580
+ // load from environment variable if set
577
581
if scanFromBlock != "" {
578
- logger .Info ().Msgf ("BuildLastBlock: envvar %s is set; scan from block %s" , envvar , scanFromBlock )
582
+ ob .logger .Chain .Info ().
583
+ Msgf ("LoadLastScannedBlock: envvar %s is set; scan from block %s" , envvar , scanFromBlock )
579
584
if scanFromBlock == clienttypes .EnvVarLatest {
580
585
header , err := ob .evmClient .HeaderByNumber (context .Background (), nil )
581
586
if err != nil {
@@ -589,22 +594,26 @@ func (ob *Observer) BuildLastBlock() error {
589
594
}
590
595
ob .SetLastBlockHeightScanned (scanFromBlockInt )
591
596
}
592
- } else { // last observed block
593
- var lastBlockNum clienttypes.LastBlockSQLType
594
- if err := ob .db .First (& lastBlockNum , clienttypes .LastBlockNumID ).Error ; err != nil {
595
- logger .Info ().Msgf ("BuildLastBlock: db PosKey does not exist; read from external chain %s" , ob .chain .String ())
597
+ } else {
598
+ // load from DB otherwise
599
+ var lastBlock clienttypes.LastBlockSQLType
600
+ if err := ob .db .First (& lastBlock , clienttypes .LastBlockNumID ).Error ; err != nil {
601
+ ob .logger .Chain .Info ().Msg ("LoadLastScannedBlock: last scanned block not found in DB, scan from latest" )
596
602
header , err := ob .evmClient .HeaderByNumber (context .Background (), nil )
597
603
if err != nil {
598
604
return err
599
605
}
600
606
ob .SetLastBlockHeightScanned (header .Number .Uint64 ())
601
607
if dbc := ob .db .Save (clienttypes .ToLastBlockSQLType (ob .GetLastBlockHeightScanned ())); dbc .Error != nil {
602
- logger .Error ().Err (dbc .Error ).Msgf ("BuildLastBlock : error writing lastBlockScanned %d to db " , ob .GetLastBlockHeightScanned ())
608
+ ob . logger .Chain . Error ().Err (dbc .Error ).Msgf ("LoadLastScannedBlock : error writing last scanned block %d to DB " , ob .GetLastBlockHeightScanned ())
603
609
}
604
610
} else {
605
- ob .SetLastBlockHeightScanned (lastBlockNum .Num )
611
+ ob .SetLastBlockHeightScanned (lastBlock .Num )
606
612
}
607
613
}
614
+ ob .logger .Chain .Info ().
615
+ Msgf ("LoadLastScannedBlock: chain %d starts scanning from block %d" , ob .chain .ChainId , ob .GetLastBlockHeightScanned ())
616
+
608
617
return nil
609
618
}
610
619
@@ -635,7 +644,7 @@ func (ob *Observer) LoadDB(dbPath string, chain chains.Chain) error {
635
644
}
636
645
637
646
ob .db = db
638
- err = ob .BuildLastBlock ()
647
+ err = ob .LoadLastScannedBlock ()
639
648
if err != nil {
640
649
return err
641
650
}
0 commit comments