Skip to content

Commit ace5a80

Browse files
authored
fix: getEvents queries with not existing block number should be bounded to [0,latest] (#2963)
bound event query range to [0, latest] when block numbers out of upper bound
1 parent 42ce4cc commit ace5a80

File tree

5 files changed

+36
-29
lines changed

5 files changed

+36
-29
lines changed

rpc/v6/events.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,9 @@ func setEventFilterRange(filter blockchain.EventFilterer, fromID, toID *BlockID,
134134
case id.Pending:
135135
return filter.SetRangeEndBlockByNumber(filterRange, latestHeight+1)
136136
default:
137+
if filterRange == blockchain.EventFilterTo {
138+
return filter.SetRangeEndBlockByNumber(filterRange, min(id.Number, latestHeight))
139+
}
137140
return filter.SetRangeEndBlockByNumber(filterRange, id.Number)
138141
}
139142
}

rpc/v6/events_test.go

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,6 @@ func TestEvents(t *testing.T) {
4848
}
4949
}
5050

51-
pending := sync.NewPending(pendingB, nil, nil)
52-
pendingData := pending.AsPendingData()
53-
mockSyncReader.EXPECT().PendingData().Return(
54-
&pendingData,
55-
nil,
56-
).Times(2)
57-
5851
handler := rpc.New(chain, mockSyncReader, nil, "", n, utils.NewNopZapLogger())
5952
from := utils.HexToFelt(t, "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7")
6053
args := rpc.EventsArg{
@@ -71,11 +64,11 @@ func TestEvents(t *testing.T) {
7164
}
7265

7366
t.Run("filter non-existent", func(t *testing.T) {
74-
t.Run("block number", func(t *testing.T) {
67+
t.Run("block number - bound to latest", func(t *testing.T) {
7568
args.ToBlock = &rpc.BlockID{Number: 55}
7669
events, err := handler.Events(args)
7770
require.Nil(t, err)
78-
require.Len(t, events.Events, 5)
71+
require.Len(t, events.Events, 4)
7972
})
8073

8174
t.Run("block hash", func(t *testing.T) {
@@ -198,6 +191,12 @@ func TestEvents(t *testing.T) {
198191
})
199192

200193
t.Run("get pending events without pagination", func(t *testing.T) {
194+
pending := sync.NewPending(pendingB, nil, nil)
195+
pendingData := pending.AsPendingData()
196+
mockSyncReader.EXPECT().PendingData().Return(
197+
&pendingData,
198+
nil,
199+
)
201200
args = rpc.EventsArg{
202201
EventFilter: rpc.EventFilter{
203202
FromBlock: &rpc.BlockID{Pending: true},
@@ -220,7 +219,7 @@ func TestEvents(t *testing.T) {
220219

221220
t.Run("get pending events with pagination", func(t *testing.T) {
222221
var err error
223-
pendingB, err = gw.BlockByNumber(t.Context(), 5)
222+
pendingB, err = gw.BlockByNumber(t.Context(), 6)
224223
require.Nil(t, err)
225224

226225
args = rpc.EventsArg{
@@ -256,9 +255,9 @@ func TestEvents(t *testing.T) {
256255
require.NotEmpty(t, events.ContinuationToken)
257256
}
258257

259-
assert.Equal(t, actualEvent.From, expectedEvent.From)
260-
assert.Equal(t, actualEvent.Keys, expectedEvent.Keys)
261-
assert.Equal(t, actualEvent.Data, expectedEvent.Data)
258+
assert.Equal(t, expectedEvent.From, actualEvent.From)
259+
assert.Equal(t, expectedEvent.Keys, actualEvent.Keys)
260+
assert.Equal(t, expectedEvent.Data, actualEvent.Data)
262261

263262
args.ContinuationToken = events.ContinuationToken
264263
}

rpc/v8/events.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ func setEventFilterRange(filter blockchain.EventFilterer, from, to *BlockID, lat
3939
case hash:
4040
return filter.SetRangeEndBlockByHash(filterRange, blockID.Hash())
4141
case number:
42+
if filterRange == blockchain.EventFilterTo {
43+
return filter.SetRangeEndBlockByNumber(filterRange, min(blockID.Number(), latestHeight))
44+
}
4245
return filter.SetRangeEndBlockByNumber(filterRange, blockID.Number())
4346
default:
4447
panic("Unknown block id type")

rpc/v9/events.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ func setEventFilterRange(filter blockchain.EventFilterer, from, to *BlockID, lat
4141
case hash:
4242
return filter.SetRangeEndBlockByHash(filterRange, blockID.Hash())
4343
case number:
44+
if filterRange == blockchain.EventFilterTo {
45+
return filter.SetRangeEndBlockByNumber(filterRange, min(blockID.Number(), latestHeight))
46+
}
4447
return filter.SetRangeEndBlockByNumber(filterRange, blockID.Number())
4548
default:
4649
panic("Unknown block id type")

rpc/v9/events_test.go

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,6 @@ func TestEvents(t *testing.T) {
4747
preConfirmedB = b
4848
}
4949
}
50-
preConfirmed := core.NewPreConfirmed(preConfirmedB, nil, nil, nil)
51-
pendingData := preConfirmed.AsPendingData()
52-
mockSyncReader.EXPECT().PendingData().Return(
53-
&pendingData,
54-
nil,
55-
).Times(2)
5650

5751
handler := rpc.New(chain, mockSyncReader, nil, "", utils.NewNopZapLogger())
5852
from := utils.HexToFelt(t, "0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7")
@@ -72,12 +66,12 @@ func TestEvents(t *testing.T) {
7266
}
7367

7468
t.Run("filter non-existent", func(t *testing.T) {
75-
t.Run("block number", func(t *testing.T) {
69+
t.Run("block number - bounds to latest", func(t *testing.T) {
7670
number := blockIDNumber(t, 55)
7771
args.ToBlock = &number
7872
events, err := handler.Events(args)
7973
require.Nil(t, err)
80-
require.Len(t, events.Events, 5)
74+
require.Len(t, events.Events, 4)
8175
})
8276

8377
t.Run("block hash", func(t *testing.T) {
@@ -202,11 +196,17 @@ func TestEvents(t *testing.T) {
202196
})
203197

204198
t.Run("get pre_confirmed events without pagination", func(t *testing.T) {
205-
preConfirmed := blockIDPreConfirmed(t)
199+
preConfirmed := core.NewPreConfirmed(preConfirmedB, nil, nil, nil)
200+
pendingData := preConfirmed.AsPendingData()
201+
mockSyncReader.EXPECT().PendingData().Return(
202+
&pendingData,
203+
nil,
204+
)
205+
preConfirmedID := blockIDPreConfirmed(t)
206206
args = rpc.EventArgs{
207207
EventFilter: rpc.EventFilter{
208-
FromBlock: &preConfirmed,
209-
ToBlock: &preConfirmed,
208+
FromBlock: &preConfirmedID,
209+
ToBlock: &preConfirmedID,
210210
},
211211
ResultPageRequest: rpcv6.ResultPageRequest{
212212
ChunkSize: 100,
@@ -225,7 +225,7 @@ func TestEvents(t *testing.T) {
225225

226226
t.Run("get pre_confirmed events with pagination", func(t *testing.T) {
227227
var err error
228-
preConfirmedB, err = gw.BlockByNumber(t.Context(), 5)
228+
preConfirmedB, err = gw.BlockByNumber(t.Context(), 6)
229229
require.Nil(t, err)
230230
preConfirmedID := blockIDPreConfirmed(t)
231231
args = rpc.EventArgs{
@@ -262,10 +262,9 @@ func TestEvents(t *testing.T) {
262262
require.NotEmpty(t, events.ContinuationToken)
263263
}
264264

265-
assert.Equal(t, actualEvent.From, expectedEvent.From)
266-
assert.Equal(t, actualEvent.Keys, expectedEvent.Keys)
267-
assert.Equal(t, actualEvent.Data, expectedEvent.Data)
268-
265+
assert.Equal(t, expectedEvent.From.String(), actualEvent.From.String())
266+
assert.Equal(t, expectedEvent.Keys, actualEvent.Keys)
267+
assert.Equal(t, expectedEvent.Data, actualEvent.Data)
269268
args.ContinuationToken = events.ContinuationToken
270269
}
271270
})

0 commit comments

Comments
 (0)