Skip to content

Commit 294acc2

Browse files
committed
fix(x/market): use reverse prefix filter for reverse keys
Signed-off-by: Artur Troian <[email protected]>
1 parent d925f20 commit 294acc2

File tree

6 files changed

+118
-91
lines changed

6 files changed

+118
-91
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ require (
4747
google.golang.org/grpc v1.74.2
4848
gopkg.in/yaml.v3 v3.0.1
4949
gotest.tools/v3 v3.5.2
50-
pkg.akt.dev/go v0.0.3-rc16
51-
pkg.akt.dev/go/cli v0.0.3-rc13
50+
pkg.akt.dev/go v0.0.3-rc19
51+
pkg.akt.dev/go/cli v0.0.3-rc14
5252
pkg.akt.dev/go/sdl v0.0.2-rc6
5353
)
5454

go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3278,10 +3278,10 @@ nhooyr.io/websocket v1.8.11/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+
32783278
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
32793279
pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA=
32803280
pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04=
3281-
pkg.akt.dev/go v0.0.3-rc16 h1:xhJlm1IC395ZtWeep9z0XJEU8k4NlPz2u80A6aIuZ+0=
3282-
pkg.akt.dev/go v0.0.3-rc16/go.mod h1:TF85k1RuubGnnESQud3FYoDT4/SWWHlccJ/JPw7gDzo=
3283-
pkg.akt.dev/go/cli v0.0.3-rc13 h1:6DgFfrIFLZ3Ii14rYvvH8CP2BaORcz93rjCk7OXnYq8=
3284-
pkg.akt.dev/go/cli v0.0.3-rc13/go.mod h1:hqpNxZAa4yqn6sODAQf/phzX4FQJ9FJIeUQGw4N7Mak=
3281+
pkg.akt.dev/go v0.0.3-rc19 h1:DU4xA1vokiTEBeJcbgvlp/+he7kjbYrphLkU0wchYdA=
3282+
pkg.akt.dev/go v0.0.3-rc19/go.mod h1:TF85k1RuubGnnESQud3FYoDT4/SWWHlccJ/JPw7gDzo=
3283+
pkg.akt.dev/go/cli v0.0.3-rc14 h1:8XO53zEesDqREXeSl4TG1eiYnpMQRZcaA6u3Rt7RDXs=
3284+
pkg.akt.dev/go/cli v0.0.3-rc14/go.mod h1:m5GHnMwbKyax4aWV+JVoziNX2O36keMh/MPtOXCUWlw=
32853285
pkg.akt.dev/go/sdl v0.0.2-rc6 h1:rlaiBL2xTl06Rq/MNePmMRyl6ucWweA5q4Mt9tZzwzM=
32863286
pkg.akt.dev/go/sdl v0.0.2-rc6/go.mod h1:OzXCY9NTPue1T0SZgqIIk1E83G1xEwxS4aCgCumF/cw=
32873287
pkg.akt.dev/specs v0.0.1 h1:OP0zil3Fr4kcCuybFqQ8LWgSlSP2Yn7306meWpu6/S4=

x/market/handler/server.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ import (
77
"github.com/cosmos/cosmos-sdk/telemetry"
88
sdk "github.com/cosmos/cosmos-sdk/types"
99
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
10-
v1 "pkg.akt.dev/go/node/market/v1"
1110

1211
atypes "pkg.akt.dev/go/node/audit/v1"
1312
dbeta "pkg.akt.dev/go/node/deployment/v1beta4"
13+
v1 "pkg.akt.dev/go/node/market/v1"
1414
types "pkg.akt.dev/go/node/market/v1beta5"
1515
ptypes "pkg.akt.dev/go/node/provider/v1beta4"
1616
)
@@ -44,6 +44,10 @@ func (ms msgServer) CreateBid(goCtx context.Context, msg *types.MsgCreateBid) (*
4444
return nil, fmt.Errorf("%w: too many existing bids (%v)", v1.ErrInvalidBid, params.OrderMaxBids)
4545
}
4646

47+
if msg.ID.BSeq != 0 {
48+
return nil, v1.ErrInvalidBid
49+
}
50+
4751
order, found := ms.keepers.Market.GetOrder(ctx, msg.ID.OrderID())
4852
if !found {
4953
return nil, v1.ErrOrderNotFound
@@ -100,7 +104,7 @@ func (ms msgServer) CreateBid(goCtx context.Context, msg *types.MsgCreateBid) (*
100104
return nil, err
101105
}
102106

103-
// create escrow account for this bid
107+
// create an escrow account for this bid
104108
err = ms.keepers.Escrow.AccountCreate(ctx, bid.ID.ToEscrowAccountID(), provider, deposits)
105109
if err != nil {
106110
return &types.MsgCreateBidResponse{}, err

x/market/keeper/grpc_query.go

Lines changed: 69 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,8 @@ func (k Querier) Orders(c context.Context, req *types.QueryOrdersRequest) (*type
6767

6868
states = append(states, byte(stateVal))
6969
} else {
70-
// request does not have pagination set. Start from open store
71-
states = append(states, byte(types.OrderOpen))
72-
states = append(states, byte(types.OrderActive))
73-
states = append(states, byte(types.OrderClosed))
70+
// request does not have a pagination set. Start from an open store
71+
states = append(states, []byte{byte(types.OrderOpen), byte(types.OrderActive), byte(types.OrderClosed)}...)
7472
}
7573

7674
var orders types.Orders
@@ -80,9 +78,11 @@ func (k Querier) Orders(c context.Context, req *types.QueryOrdersRequest) (*type
8078

8179
total := uint64(0)
8280

83-
for idx := range states {
81+
var idx int
82+
var err error
83+
84+
for idx = range states {
8485
state := types.Order_State(states[idx])
85-
var err error
8686

8787
if idx > 0 {
8888
req.Pagination.Key = nil
@@ -125,34 +125,28 @@ func (k Querier) Orders(c context.Context, req *types.QueryOrdersRequest) (*type
125125
return nil, status.Error(codes.Internal, err.Error())
126126
}
127127

128-
if len(pageRes.NextKey) > 0 {
129-
nextKey := make([]byte, len(searchPrefix)+len(pageRes.NextKey))
130-
copy(nextKey, searchPrefix)
131-
copy(nextKey[len(searchPrefix):], pageRes.NextKey)
132-
133-
pageRes.NextKey = nextKey
134-
}
135-
136128
req.Pagination.Limit -= count
137129
total += count
138130

139131
if req.Pagination.Limit == 0 {
140-
if len(pageRes.NextKey) > 0 {
141-
pageRes.NextKey, err = query.EncodePaginationKey(states[idx:], searchPrefix, pageRes.NextKey, nil)
142-
if err != nil {
143-
pageRes.Total = total
144-
return &types.QueryOrdersResponse{
145-
Orders: orders,
146-
Pagination: pageRes,
147-
}, status.Error(codes.Internal, err.Error())
148-
}
149-
}
150-
151132
break
152133
}
153134
}
154135

155-
pageRes.Total = total
136+
if pageRes != nil {
137+
pageRes.Total = total
138+
139+
if len(pageRes.NextKey) > 0 {
140+
pageRes.NextKey, err = query.EncodePaginationKey(states[idx:], searchPrefix, pageRes.NextKey, nil)
141+
if err != nil {
142+
pageRes.Total = total
143+
return &types.QueryOrdersResponse{
144+
Orders: orders,
145+
Pagination: pageRes,
146+
}, status.Error(codes.Internal, err.Error())
147+
}
148+
}
149+
}
156150

157151
return &types.QueryOrdersResponse{
158152
Orders: orders,
@@ -196,7 +190,7 @@ func (k Querier) Bids(c context.Context, req *types.QueryBidsRequest) (*types.Qu
196190
}
197191
req.Pagination.Key = key
198192

199-
if unsolicited[1] == 1 {
193+
if unsolicited[0] == 1 {
200194
reverseSearch = true
201195
}
202196
} else if req.Filters.State != "" {
@@ -210,7 +204,7 @@ func (k Querier) Bids(c context.Context, req *types.QueryBidsRequest) (*types.Qu
210204

211205
states = append(states, byte(stateVal))
212206
} else {
213-
// request does not have pagination set. Start from open store
207+
// request does not have a pagination set. Start from an open store
214208
states = append(states, byte(types.BidOpen), byte(types.BidActive), byte(types.BidLost), byte(types.BidClosed))
215209
}
216210

@@ -220,9 +214,11 @@ func (k Querier) Bids(c context.Context, req *types.QueryBidsRequest) (*types.Qu
220214

221215
total := uint64(0)
222216

223-
for idx := range states {
217+
var idx int
218+
var err error
219+
220+
for idx = range states {
224221
state := types.Bid_State(states[idx])
225-
var err error
226222

227223
if idx > 0 {
228224
req.Pagination.Key = nil
@@ -278,41 +274,35 @@ func (k Querier) Bids(c context.Context, req *types.QueryBidsRequest) (*types.Qu
278274
return nil, status.Error(codes.Internal, err.Error())
279275
}
280276

281-
if len(pageRes.NextKey) > 0 {
282-
nextKey := make([]byte, len(searchPrefix)+len(pageRes.NextKey))
283-
copy(nextKey, searchPrefix)
284-
copy(nextKey[len(searchPrefix):], pageRes.NextKey)
285-
286-
pageRes.NextKey = nextKey
287-
}
288-
289277
req.Pagination.Limit -= count
290278
total += count
291279

292280
if req.Pagination.Limit == 0 {
293-
if len(pageRes.NextKey) > 0 {
294-
unsolicited := make([]byte, 1)
295-
unsolicited[0] = 0
296-
if reverseSearch {
297-
unsolicited[0] = 1
298-
}
281+
break
282+
}
283+
}
299284

300-
pageRes.NextKey, err = query.EncodePaginationKey(states[idx:], searchPrefix, pageRes.NextKey, unsolicited)
301-
if err != nil {
302-
pageRes.Total = total
303-
return &types.QueryBidsResponse{
304-
Bids: bids,
305-
Pagination: pageRes,
306-
}, status.Error(codes.Internal, err.Error())
307-
}
285+
if pageRes != nil {
286+
pageRes.Total = total
287+
288+
if len(pageRes.NextKey) > 0 {
289+
unsolicited := make([]byte, 1)
290+
unsolicited[0] = 0
291+
if reverseSearch {
292+
unsolicited[0] = 1
308293
}
309294

310-
break
295+
pageRes.NextKey, err = query.EncodePaginationKey(states[idx:], searchPrefix, pageRes.NextKey, unsolicited)
296+
if err != nil {
297+
pageRes.Total = total
298+
return &types.QueryBidsResponse{
299+
Bids: bids,
300+
Pagination: pageRes,
301+
}, status.Error(codes.Internal, err.Error())
302+
}
311303
}
312304
}
313305

314-
pageRes.Total = total
315-
316306
return &types.QueryBidsResponse{
317307
Bids: bids,
318308
Pagination: pageRes,
@@ -370,7 +360,7 @@ func (k Querier) Leases(c context.Context, req *types.QueryLeasesRequest) (*type
370360

371361
states = append(states, byte(stateVal))
372362
} else {
373-
// request does not have pagination set. Start from open store
363+
// request does not have a pagination set. Start from an open store
374364
states = append(states, byte(v1.LeaseActive), byte(v1.LeaseInsufficientFunds), byte(v1.LeaseClosed))
375365
}
376366

@@ -380,9 +370,11 @@ func (k Querier) Leases(c context.Context, req *types.QueryLeasesRequest) (*type
380370

381371
total := uint64(0)
382372

383-
for idx := range states {
373+
var idx int
374+
var err error
375+
376+
for idx = range states {
384377
state := v1.Lease_State(states[idx])
385-
var err error
386378

387379
if idx > 0 {
388380
req.Pagination.Key = nil
@@ -443,29 +435,31 @@ func (k Querier) Leases(c context.Context, req *types.QueryLeasesRequest) (*type
443435
total += count
444436

445437
if req.Pagination.Limit == 0 {
446-
if len(pageRes.NextKey) > 0 {
447-
unsolicited := make([]byte, 1)
448-
unsolicited[0] = 0
449-
if reverseSearch {
450-
unsolicited[0] = 1
451-
}
438+
break
439+
}
440+
}
452441

453-
pageRes.NextKey, err = query.EncodePaginationKey(states[idx:], searchPrefix, pageRes.NextKey, unsolicited)
454-
if err != nil {
455-
pageRes.Total = total
456-
return &types.QueryLeasesResponse{
457-
Leases: leases,
458-
Pagination: pageRes,
459-
}, status.Error(codes.Internal, err.Error())
460-
}
442+
if pageRes != nil {
443+
pageRes.Total = total
444+
445+
if len(pageRes.NextKey) > 0 {
446+
unsolicited := make([]byte, 1)
447+
unsolicited[0] = 0
448+
if reverseSearch {
449+
unsolicited[0] = 1
461450
}
462451

463-
break
452+
pageRes.NextKey, err = query.EncodePaginationKey(states[idx:], searchPrefix, pageRes.NextKey, unsolicited)
453+
if err != nil {
454+
pageRes.Total = total
455+
return &types.QueryLeasesResponse{
456+
Leases: leases,
457+
Pagination: pageRes,
458+
}, status.Error(codes.Internal, err.Error())
459+
}
464460
}
465461
}
466462

467-
pageRes.Total = total
468-
469463
return &types.QueryLeasesResponse{
470464
Leases: leases,
471465
Pagination: pageRes,

x/market/keeper/keeper.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
storetypes "cosmossdk.io/store/types"
77
"github.com/cosmos/cosmos-sdk/codec"
88
sdk "github.com/cosmos/cosmos-sdk/types"
9+
910
dtypes "pkg.akt.dev/go/node/deployment/v1"
1011
dtypesBeta "pkg.akt.dev/go/node/deployment/v1beta4"
1112
mv1 "pkg.akt.dev/go/node/market/v1"
@@ -345,7 +346,6 @@ func (k Keeper) OnLeaseClosed(ctx sdk.Context, lease mv1.Lease, state mv1.Lease_
345346
}
346347

347348
// OnGroupClosed updates state of all orders, bids and leases in group to closed
348-
349349
func (k Keeper) OnGroupClosed(ctx sdk.Context, id dtypes.GroupID) error {
350350
processClose := func(ctx sdk.Context, bid types.Bid) error {
351351
err := k.OnBidClosed(ctx, bid)

0 commit comments

Comments
 (0)