Skip to content

Commit a41193b

Browse files
committed
Do not skip headers
1 parent 4e38c90 commit a41193b

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

lib/blockchain/ethereum.go

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1271,9 +1271,15 @@ func (e *EthereumClient) startPollingHeaders() error {
12711271
pollInterval := time.Second * 5
12721272
ticker := time.NewTicker(pollInterval)
12731273
e.subscriptionWg.Add(1)
1274+
1275+
latestHeader, err := e.HeaderByNumber(context.Background(), nil) // Fetch the latest header
1276+
if err != nil {
1277+
return fmt.Errorf("failed to fetch the latest header during initialization: %w", err)
1278+
}
12741279
go func() {
12751280
defer e.subscriptionWg.Done()
1276-
lastHeaderNumber := uint64(0)
1281+
// Initialize lastHeaderNumber dynamically
1282+
lastHeaderNumber := latestHeader.Number.Uint64() - 1
12771283
for {
12781284
select {
12791285
case <-ticker.C:
@@ -1288,6 +1294,21 @@ func (e *EthereumClient) startPollingHeaders() error {
12881294
e.l.Error().Err(err).Msg("Error processing header")
12891295
continue
12901296
}
1297+
1298+
// Process headers from (lastHeaderNumber + 1) to latestHeader.Number
1299+
// We may need to add a rate limiter, if we run into issues.
1300+
for blockNum := lastHeaderNumber + 1; blockNum <= latestHeader.Number.Uint64(); blockNum++ {
1301+
header, err := e.HeaderByNumber(context.Background(), big.NewInt(int64(blockNum)))
1302+
if err != nil {
1303+
e.l.Error().Err(err).Uint64("BlockNumber", blockNum).Msg("Error fetching header during range processing")
1304+
continue
1305+
}
1306+
lastHeaderNumber = header.Number.Uint64()
1307+
if err := e.receiveHeader(header); err != nil {
1308+
e.l.Error().Err(err).Uint64("BlockNumber", blockNum).Msg("Error processing header")
1309+
continue
1310+
}
1311+
}
12911312
}
12921313
case <-e.doneChan:
12931314
e.l.Debug().Str("Network", e.NetworkConfig.Name).Msg("Polling loop cancelled")

0 commit comments

Comments
 (0)