basic auction bidding system

master
michael 2022-08-28 20:28:25 +00:00
parent 3eb5705b92
commit d13f2956ac
1 changed files with 37 additions and 2 deletions

View File

@ -2,16 +2,51 @@ package keeper
import ( import (
"context" "context"
"fmt"
"math/big"
"cosmos-test/x/cosmostest/types" "cosmos-test/x/cosmostest/types"
sdk "github.com/cosmos/cosmos-sdk/types" sdk "github.com/cosmos/cosmos-sdk/types"
) )
func (k msgServer) NewBid(goCtx context.Context, msg *types.MsgNewBid) (*types.MsgNewBidResponse, error) { func (k msgServer) NewBid(goCtx context.Context, msg *types.MsgNewBid) (*types.MsgNewBidResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx) ctx := sdk.UnwrapSDKContext(goCtx)
// TODO: Handling the message auction, found := k.Keeper.GetAuction(ctx, msg.AuctionIndex)
_ = ctx if !found {
return nil, fmt.Errorf("didn't find auction of index %s", msg.AuctionIndex)
}
ok := false
amt := new(big.Int)
amt, ok = amt.SetString(msg.Amount, 10)
if !ok {
return nil, fmt.Errorf("failed to convert `%s` to a large integer", msg.Amount)
}
if amt.Sign() != 1 {
return nil, fmt.Errorf("bid amount must be greater than 0")
}
amtPrev := big.NewInt(0)
if len(auction.Bids) > 0 {
// shouldn't need to check validity, because we assume it's checked
// before approving & inserting the bid
latestBid := auction.Bids[len(auction.Bids)-1]
amtPrev, _ = amtPrev.SetString(latestBid.Amount, 10)
}
if amt.Cmp(amtPrev) < 1 {
return nil, fmt.Errorf("bid amount must be greater than largest bid")
}
bid := &types.Bid{
Amount: msg.Amount,
Owner: msg.Creator,
}
auction.Bids = append(auction.Bids, bid)
k.Keeper.SetAuction(ctx, auction)
return &types.MsgNewBidResponse{}, nil return &types.MsgNewBidResponse{}, nil
} }