Skip to content
This repository was archived by the owner on Dec 4, 2024. It is now read-only.

Commit be87a2f

Browse files
Small fixes
1 parent 57dca75 commit be87a2f

File tree

3 files changed

+45
-46
lines changed

3 files changed

+45
-46
lines changed

consensus/polybft/eventtracker/event_tracker.go

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,6 @@ type EventTrackerConfig struct {
2929
// RPCEndpoint is the full json rpc url on some node on a tracked chain
3030
RPCEndpoint string
3131

32-
// StartBlockFromConfig represents a starting block from which tracker starts to
33-
// track events from a tracked chain.
34-
// This is only relevant on the first start of the tracker. After it processes blocks,
35-
// it will start from the last processed block, and not from the StartBlockFromConfig.
36-
StartBlockFromConfig uint64
37-
3832
// NumBlockConfirmations defines how many blocks must pass from a certain block,
3933
// to consider that block as final on the tracked chain.
4034
// This is very important for reorgs, and events from the given block will only be
@@ -50,13 +44,13 @@ type EventTrackerConfig struct {
5044
// from memory, and continue to the next batch)
5145
SyncBatchSize uint64
5246

53-
// MaxBacklogSize defines how many blocks we will sync up from the latest block on tracked chain.
47+
// NumOfBlocksToReconcile defines how many blocks we will sync up from the latest block on tracked chain.
5448
// If a node that has tracker, was offline for days, months, a year, it will miss a lot of blocks.
5549
// In the meantime, we expect the rest of nodes to have collected the desired events and did their
5650
// logic with them, continuing consensus and relayer stuff.
57-
// In order to not waste too much unnecessary time in syncing all those blocks, with MaxBacklogSize,
58-
// we tell the tracker to sync only latestBlock.Number - MaxBacklogSize number of blocks.
59-
MaxBacklogSize uint64
51+
// In order to not waste too much unnecessary time in syncing all those blocks, with NumOfBlocksToReconcile,
52+
// we tell the tracker to sync only latestBlock.Number - NumOfBlocksToReconcile number of blocks.
53+
NumOfBlocksToReconcile uint64
6054

6155
// PollInterval defines a time interval in which tracker polls json rpc node
6256
// for latest block on the tracked chain.
@@ -122,13 +116,19 @@ func NewEventTracker(config *EventTrackerConfig) (*EventTracker, error) {
122116
return nil, err
123117
}
124118

125-
var definiteLastProcessedBlock uint64
126-
if config.StartBlockFromConfig > 0 {
127-
definiteLastProcessedBlock = config.StartBlockFromConfig - 1
128-
}
119+
definiteLastProcessedBlock := lastProcessedBlock
120+
121+
if lastProcessedBlock == 0 && config.NumOfBlocksToReconcile > 0 {
122+
latestBlock, err := config.BlockProvider.GetBlockByNumber(ethgo.Latest, false)
123+
if err != nil {
124+
return nil, err
125+
}
129126

130-
if lastProcessedBlock > definiteLastProcessedBlock {
131-
definiteLastProcessedBlock = lastProcessedBlock
127+
if latestBlock.Number > config.NumOfBlocksToReconcile {
128+
// if this is a fresh start, then we should start syncing from
129+
// latestBlock.Number - NumOfBlocksToReconcile
130+
definiteLastProcessedBlock = latestBlock.Number - config.NumOfBlocksToReconcile
131+
}
132132
}
133133

134134
return &EventTracker{
@@ -170,11 +170,10 @@ func (e *EventTracker) Close() {
170170
func (e *EventTracker) Start() error {
171171
e.config.Logger.Info("Starting event tracker",
172172
"jsonRpcEndpoint", e.config.RPCEndpoint,
173-
"startBlockFromConfig", e.config.StartBlockFromConfig,
174173
"numBlockConfirmations", e.config.NumBlockConfirmations,
175174
"pollInterval", e.config.PollInterval,
176175
"syncBatchSize", e.config.SyncBatchSize,
177-
"maxBacklogSize", e.config.MaxBacklogSize,
176+
"numOfBlocksToReconcile", e.config.NumOfBlocksToReconcile,
178177
"logFilter", e.config.LogFilter,
179178
)
180179

@@ -294,9 +293,10 @@ func (e *EventTracker) getNewState(latestBlock *ethgo.Block) error {
294293
startBlock := lastProcessedBlock + 1
295294

296295
// sanitize startBlock from which we will start polling for blocks
297-
if latestBlock.Number > e.config.MaxBacklogSize &&
298-
latestBlock.Number-e.config.MaxBacklogSize > lastProcessedBlock {
299-
startBlock = latestBlock.Number - e.config.MaxBacklogSize
296+
if e.config.NumOfBlocksToReconcile > 0 &&
297+
latestBlock.Number > e.config.NumOfBlocksToReconcile &&
298+
latestBlock.Number-e.config.NumOfBlocksToReconcile > lastProcessedBlock {
299+
startBlock = latestBlock.Number - e.config.NumOfBlocksToReconcile
300300
}
301301

302302
// get blocks in batches

consensus/polybft/eventtracker/event_tracker_test.go

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ func TestEventTracker_TrackBlock(t *testing.T) {
8989
t.Run("Add block by block - no confirmed blocks", func(t *testing.T) {
9090
t.Parallel()
9191

92-
tracker, err := NewEventTracker(createTestTrackerConfig(t, 10, 10, 1000))
92+
tracker, err := NewEventTracker(createTestTrackerConfig(t, 10, 10, 0))
9393

9494
require.NoError(t, err)
9595

@@ -131,7 +131,7 @@ func TestEventTracker_TrackBlock(t *testing.T) {
131131
blockProviderMock := new(mockProvider)
132132
blockProviderMock.On("GetLogs", mock.Anything).Return([]*ethgo.Log{}, nil).Once()
133133

134-
tracker, err := NewEventTracker(createTestTrackerConfig(t, numBlockConfirmations, 10, 1000))
134+
tracker, err := NewEventTracker(createTestTrackerConfig(t, numBlockConfirmations, 10, 0))
135135
require.NoError(t, err)
136136

137137
tracker.config.BlockProvider = blockProviderMock
@@ -197,7 +197,7 @@ func TestEventTracker_TrackBlock(t *testing.T) {
197197
blockProviderMock := new(mockProvider)
198198
blockProviderMock.On("GetLogs", mock.Anything).Return(logs, nil).Once()
199199

200-
tracker, err := NewEventTracker(createTestTrackerConfig(t, numBlockConfirmations, 10, 1000))
200+
tracker, err := NewEventTracker(createTestTrackerConfig(t, numBlockConfirmations, 10, 0))
201201
require.NoError(t, err)
202202

203203
tracker.config.BlockProvider = blockProviderMock
@@ -265,7 +265,7 @@ func TestEventTracker_TrackBlock(t *testing.T) {
265265
blockProviderMock := new(mockProvider)
266266
blockProviderMock.On("GetLogs", mock.Anything).Return(nil, errors.New("some error occurred")).Once()
267267

268-
tracker, err := NewEventTracker(createTestTrackerConfig(t, numBlockConfirmations, 10, 1000))
268+
tracker, err := NewEventTracker(createTestTrackerConfig(t, numBlockConfirmations, 10, 0))
269269
require.NoError(t, err)
270270

271271
tracker.config.BlockProvider = blockProviderMock
@@ -335,7 +335,7 @@ func TestEventTracker_TrackBlock(t *testing.T) {
335335
// just mock the call, it will use the provider.blocks map to handle proper returns
336336
blockProviderMock.On("GetBlockByNumber", mock.Anything, mock.Anything).Return(nil, nil).Times(int(numOfMissedBlocks))
337337

338-
tracker, err := NewEventTracker(createTestTrackerConfig(t, numBlockConfirmations, batchSize, 1000))
338+
tracker, err := NewEventTracker(createTestTrackerConfig(t, numBlockConfirmations, batchSize, 0))
339339
require.NoError(t, err)
340340

341341
tracker.config.BlockProvider = blockProviderMock
@@ -420,7 +420,7 @@ func TestEventTracker_TrackBlock(t *testing.T) {
420420
// just mock the call, it will use the provider.blocks map to handle proper returns
421421
blockProviderMock.On("GetBlockByNumber", mock.Anything, mock.Anything).Return(nil, nil).Times(int(numOfMissedBlocks + numOfCachedBlocks))
422422

423-
tracker, err := NewEventTracker(createTestTrackerConfig(t, numBlockConfirmations, batchSize, 1000))
423+
tracker, err := NewEventTracker(createTestTrackerConfig(t, numBlockConfirmations, batchSize, 0))
424424
require.NoError(t, err)
425425

426426
tracker.config.BlockProvider = blockProviderMock
@@ -515,7 +515,7 @@ func TestEventTracker_TrackBlock(t *testing.T) {
515515
// just mock the call, it will use the provider.blocks map to handle proper returns
516516
blockProviderMock.On("GetBlockByNumber", mock.Anything, mock.Anything).Return(nil, nil).Times(int(numOfCachedBlocks))
517517

518-
tracker, err := NewEventTracker(createTestTrackerConfig(t, numBlockConfirmations, batchSize, 1000))
518+
tracker, err := NewEventTracker(createTestTrackerConfig(t, numBlockConfirmations, batchSize, 0))
519519
require.NoError(t, err)
520520

521521
tracker.config.BlockProvider = blockProviderMock
@@ -582,19 +582,19 @@ func TestEventTracker_TrackBlock(t *testing.T) {
582582
})
583583
}
584584

585-
func createTestTrackerConfig(t *testing.T, numBlockConfirmations, batchSize, maxBacklogSize uint64) *EventTrackerConfig {
585+
func createTestTrackerConfig(t *testing.T, numBlockConfirmations, batchSize,
586+
numOfBlocksToReconcile uint64) *EventTrackerConfig {
586587
t.Helper()
587588

588589
var stateSyncEvent contractsapi.StateSyncedEvent
589590

590591
return &EventTrackerConfig{
591-
RPCEndpoint: "http://some-rpc-url.com",
592-
StartBlockFromConfig: 0,
593-
NumBlockConfirmations: numBlockConfirmations,
594-
SyncBatchSize: batchSize,
595-
MaxBacklogSize: maxBacklogSize,
596-
PollInterval: 2 * time.Second,
597-
Logger: hclog.NewNullLogger(),
592+
RPCEndpoint: "http://some-rpc-url.com",
593+
NumBlockConfirmations: numBlockConfirmations,
594+
SyncBatchSize: batchSize,
595+
NumOfBlocksToReconcile: numOfBlocksToReconcile,
596+
PollInterval: 2 * time.Second,
597+
Logger: hclog.NewNullLogger(),
598598
LogFilter: map[ethgo.Address][]ethgo.Hash{
599599
ethgo.ZeroAddress: {stateSyncEvent.Sig()},
600600
},

consensus/polybft/state_sync_manager.go

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -145,16 +145,15 @@ func (s *stateSyncManager) setupNewTracker() error {
145145
var stateSyncEvent contractsapi.StateSyncedEvent
146146

147147
tracker, err := eventtracker.NewEventTracker(&eventtracker.EventTrackerConfig{
148-
RPCEndpoint: s.config.jsonrpcAddr,
149-
StartBlockFromConfig: s.config.stateSenderStartBlock,
150-
NumBlockConfirmations: s.config.numBlockConfirmations,
151-
SyncBatchSize: 5, // this should be configurable
152-
MaxBacklogSize: 10_000, // this should be configurable
153-
PollInterval: s.config.blockTrackerPollInterval,
154-
Logger: s.logger,
155-
Store: store,
156-
EventSubscriber: s,
157-
BlockProvider: clt.Eth(),
148+
RPCEndpoint: s.config.jsonrpcAddr,
149+
NumBlockConfirmations: s.config.numBlockConfirmations,
150+
SyncBatchSize: 5, // this should be configurable
151+
NumOfBlocksToReconcile: 0, // this should be configurable
152+
PollInterval: s.config.blockTrackerPollInterval,
153+
Logger: s.logger,
154+
Store: store,
155+
EventSubscriber: s,
156+
BlockProvider: clt.Eth(),
158157
LogFilter: map[ethgo.Address][]ethgo.Hash{
159158
ethgo.Address(s.config.stateSenderAddr): {stateSyncEvent.Sig()},
160159
},

0 commit comments

Comments
 (0)