mirror of
https://github.com/grassrootseconomics/eth-tracker.git
synced 2025-04-19 07:01:01 +02:00
57 lines
1.2 KiB
Go
57 lines
1.2 KiB
Go
package syncer
|
|
|
|
import (
|
|
"log/slog"
|
|
|
|
"github.com/bits-and-blooms/bitset"
|
|
"github.com/celo-org/celo-blockchain/core/types"
|
|
"github.com/celo-org/celo-blockchain/ethclient"
|
|
"github.com/ef-ds/deque/v2"
|
|
"github.com/grassrootseconomics/celo-events/internal/chain"
|
|
"github.com/grassrootseconomics/celo-events/internal/stats"
|
|
)
|
|
|
|
const (
|
|
blockBatchSize = 100
|
|
)
|
|
|
|
type (
|
|
SyncerOpts struct {
|
|
WebSocketEndpoint string
|
|
BatchQueue *deque.Deque[uint64]
|
|
BlocksQueue *deque.Deque[types.Block]
|
|
Chain *chain.Chain
|
|
Logg *slog.Logger
|
|
Stats *stats.Stats
|
|
// replace with db
|
|
Db *bitset.BitSet
|
|
}
|
|
|
|
Syncer struct {
|
|
batchQueue *deque.Deque[uint64]
|
|
blocksQueue *deque.Deque[types.Block]
|
|
chain *chain.Chain
|
|
logg *slog.Logger
|
|
stats *stats.Stats
|
|
ethClient *ethclient.Client
|
|
db *bitset.BitSet
|
|
}
|
|
)
|
|
|
|
func NewSyncer(o SyncerOpts) (*Syncer, error) {
|
|
ethClient, err := ethclient.Dial(o.WebSocketEndpoint)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &Syncer{
|
|
batchQueue: o.BatchQueue,
|
|
blocksQueue: o.BlocksQueue,
|
|
chain: o.Chain,
|
|
logg: o.Logg,
|
|
stats: o.Stats,
|
|
ethClient: ethClient,
|
|
db: o.Db,
|
|
}, nil
|
|
}
|