Skip to content

Commit 35a0993

Browse files
infrmtcswojciechos
authored andcommitted
fix(rpc): fix processedEvents not handled if starting from pending (#2673)
1 parent 25d1042 commit 35a0993

File tree

3 files changed

+48
-3
lines changed

3 files changed

+48
-3
lines changed

blockchain/event_filter.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,11 @@ func (e *EventFilter) Events(cToken *ContinuationToken, chunkSize uint64) ([]*Fi
124124
}
125125
}
126126

127+
var skippedEvents uint64
127128
curBlock := e.fromBlock
128129
// skip the blocks that we previously processed for this request
129130
if cToken != nil {
131+
skippedEvents = cToken.processedEvents
130132
curBlock = cToken.fromBlock
131133
}
132134

@@ -161,14 +163,17 @@ func (e *EventFilter) Events(cToken *ContinuationToken, chunkSize uint64) ([]*Fi
161163
}
162164

163165
var processedEvents uint64
164-
matchedEvents, processedEvents, err = e.matcher.AppendBlockEvents(matchedEvents, header, receipts, cToken, chunkSize)
166+
matchedEvents, processedEvents, err = e.matcher.AppendBlockEvents(matchedEvents, header, receipts, skippedEvents, chunkSize)
165167
if err != nil {
166168
if errors.Is(err, errChunkSizeReached) {
167169
rToken = &ContinuationToken{fromBlock: curBlock, processedEvents: processedEvents}
168170
break
169171
}
170172
return nil, nil, err
171173
}
174+
175+
// Skipped events are processed, so we can reset the counter
176+
skippedEvents = 0
172177
}
173178

174179
if rToken == nil && remainingScannedBlocks == 0 && curBlock <= e.toBlock {

blockchain/event_matcher.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ func (e *EventMatcher) TestBloom(bloomFilter *bloom.BloomFilter) bool {
9393
}
9494

9595
func (e *EventMatcher) AppendBlockEvents(matchedEventsSofar []*FilteredEvent, header *core.Header, receipts []*core.TransactionReceipt,
96-
cToken *ContinuationToken, chunkSize uint64,
96+
skippedEvents uint64, chunkSize uint64,
9797
) ([]*FilteredEvent, uint64, error) {
9898
processedEvents := uint64(0)
9999
for _, receipt := range receipts {
@@ -106,7 +106,7 @@ func (e *EventMatcher) AppendBlockEvents(matchedEventsSofar []*FilteredEvent, he
106106

107107
// if last request was interrupted mid-block, and we are still processing that block, skip events
108108
// that were already processed
109-
if cToken != nil && header.Number == cToken.fromBlock && processedEvents < cToken.processedEvents {
109+
if processedEvents < skippedEvents {
110110
processedEvents++
111111
continue
112112
}

rpc/v6/events_test.go

+40
Original file line numberDiff line numberDiff line change
@@ -205,4 +205,44 @@ func TestEvents(t *testing.T) {
205205
assert.Nil(t, events.Events[0].BlockNumber)
206206
assert.Equal(t, utils.HexToFelt(t, "0x785c2ada3f53fbc66078d47715c27718f92e6e48b96372b36e5197de69b82b5"), events.Events[0].TransactionHash)
207207
})
208+
209+
t.Run("get pending events with pagination", func(t *testing.T) {
210+
var err error
211+
pendingB, err = gw.BlockByNumber(t.Context(), 5)
212+
require.Nil(t, err)
213+
214+
args = rpc.EventsArg{
215+
EventFilter: rpc.EventFilter{
216+
FromBlock: &rpc.BlockID{Pending: true},
217+
ToBlock: &rpc.BlockID{Pending: true},
218+
},
219+
ResultPageRequest: rpc.ResultPageRequest{
220+
ChunkSize: 1,
221+
},
222+
}
223+
224+
allEvents := []*core.Event{}
225+
226+
for _, receipt := range pendingB.Receipts {
227+
allEvents = append(allEvents, receipt.Events...)
228+
}
229+
230+
for i, expectedEvent := range allEvents {
231+
events, err := handler.Events(args)
232+
require.Nil(t, err)
233+
require.Len(t, events.Events, 1)
234+
actualEvent := events.Events[0]
235+
if i == len(allEvents)-1 {
236+
require.Empty(t, events.ContinuationToken)
237+
} else {
238+
require.NotEmpty(t, events.ContinuationToken)
239+
}
240+
241+
assert.Equal(t, actualEvent.From, expectedEvent.From)
242+
assert.Equal(t, actualEvent.Keys, expectedEvent.Keys)
243+
assert.Equal(t, actualEvent.Data, expectedEvent.Data)
244+
245+
args.ContinuationToken = events.ContinuationToken
246+
}
247+
})
208248
}

0 commit comments

Comments
 (0)