Skip to content

Commit bbfb16e

Browse files
committed
feat: prevent duplicate bids
fixes #534
1 parent 4072ba8 commit bbfb16e

File tree

4 files changed

+19
-6
lines changed

4 files changed

+19
-6
lines changed

x/market/handler/handler.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ func handleMsgCreateBid(ctx sdk.Context, keepers Keepers, msg types.MsgCreateBid
4545
return nil, types.ErrAtributeMismatch
4646
}
4747

48-
// TODO: ensure not a current bid from this provider
49-
50-
keepers.Market.CreateBid(ctx, msg.Order, msg.Provider, msg.Price)
48+
if _, err := keepers.Market.CreateBid(ctx, msg.Order, msg.Provider, msg.Price); err != nil {
49+
return nil, err
50+
}
5151

5252
return &sdk.Result{
5353
Events: ctx.EventManager().Events(),

x/market/keeper/keeper.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ func (k Keeper) CreateOrder(ctx sdk.Context, gid dtypes.GroupID, spec dtypes.Gro
6868
}
6969

7070
// CreateBid creates a bid for a order with given orderID, price for bid and provider
71-
func (k Keeper) CreateBid(ctx sdk.Context, oid types.OrderID, provider sdk.AccAddress, price sdk.Coin) {
71+
func (k Keeper) CreateBid(ctx sdk.Context, oid types.OrderID, provider sdk.AccAddress, price sdk.Coin) (types.Bid, error) {
7272

7373
store := ctx.KVStore(k.skey)
7474

@@ -80,6 +80,10 @@ func (k Keeper) CreateBid(ctx sdk.Context, oid types.OrderID, provider sdk.AccAd
8080

8181
key := bidKey(bid.ID())
8282

83+
if store.Has(key) {
84+
return types.Bid{}, types.ErrBidExists
85+
}
86+
8387
// XXX TODO: check not overwrite
8488
store.Set(key, k.cdc.MustMarshalBinaryBare(bid))
8589

@@ -89,6 +93,8 @@ func (k Keeper) CreateBid(ctx sdk.Context, oid types.OrderID, provider sdk.AccAd
8993
Price: price,
9094
}.ToSDKEvent(),
9195
)
96+
97+
return bid, nil
9298
}
9399

94100
// CreateLease creates lease for bid with given bidID

x/market/simulation/operations.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package simulation
22

33
import (
4+
"errors"
45
"fmt"
56
"math/rand"
67

@@ -122,11 +123,15 @@ func SimulateMsgCreateBid(ak govtypes.AccountKeeper, ks keepers.Keepers) simulat
122123
)
123124

124125
_, _, err = app.Deliver(tx)
125-
if err != nil {
126+
switch {
127+
case err == nil:
128+
return simulation.NewOperationMsg(msg, true, ""), nil, nil
129+
case errors.Is(err, types.ErrBidExists):
130+
return simulation.NewOperationMsg(msg, false, ""), nil, nil
131+
default:
126132
return simulation.NoOpMsg(types.ModuleName), nil, err
127133
}
128134

129-
return simulation.NewOperationMsg(msg, true, ""), nil, nil
130135
}
131136
}
132137

x/market/types/errors.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,6 @@ var (
3737
ErrBidNotFound = sdkerrors.Register(ModuleName, 15, "invalid bid: bid not found")
3838
// ErrLeaseNotFound lease not found
3939
ErrLeaseNotFound = sdkerrors.Register(ModuleName, 16, "invalid lease: lease not found")
40+
// ErrBidExists bid exists
41+
ErrBidExists = sdkerrors.Register(ModuleName, 17, "invalid bid: bid exists from provider")
4042
)

0 commit comments

Comments
 (0)