mirror of
https://github.com/grassrootseconomics/eth-tracker.git
synced 2025-04-22 08:21:03 +02:00
41 lines
1012 B
Go
41 lines
1012 B
Go
package syncer
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/celo-org/celo-blockchain/core/types"
|
|
"github.com/celo-org/celo-blockchain/event"
|
|
)
|
|
|
|
const (
|
|
resubscribeInterval = 5 * time.Second
|
|
)
|
|
|
|
func (s *Syncer) StartRealtimeSyncer(ctx context.Context) error {
|
|
newHeadersReceiver := make(chan *types.Header, 1)
|
|
|
|
sub := event.ResubscribeErr(resubscribeInterval, func(ctx context.Context, err error) (event.Subscription, error) {
|
|
if err != nil {
|
|
s.logg.Error("realtime syncer resubscribe error", "error", err)
|
|
}
|
|
return s.ethClient.SubscribeNewHead(ctx, newHeadersReceiver)
|
|
})
|
|
defer sub.Unsubscribe()
|
|
|
|
for {
|
|
select {
|
|
case <-ctx.Done():
|
|
s.logg.Info("realtime syncer shutting down")
|
|
return nil
|
|
case header := <-newHeadersReceiver:
|
|
blockNumber := header.Number.Uint64()
|
|
block, err := s.chain.GetBlock(context.Background(), blockNumber)
|
|
if err != nil {
|
|
s.logg.Error("realtime block fetcher error", "block", blockNumber, "error", err)
|
|
}
|
|
s.blocksQueue.PushFront(block)
|
|
}
|
|
}
|
|
}
|