-
Notifications
You must be signed in to change notification settings - Fork 1
/
msg_server_register_pairs.go
52 lines (43 loc) · 1.69 KB
/
msg_server_register_pairs.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package msgserver
import (
"context"
"github.com/Timwood0x10/sei-chain/x/dex/types"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
)
func (k msgServer) RegisterPairs(goCtx context.Context, msg *types.MsgRegisterPairs) (*types.MsgRegisterPairsResponse, error) {
if err := msg.ValidateBasic(); err != nil {
return nil, err
}
ctx := sdk.UnwrapSDKContext(goCtx)
maxPairsPerContract := k.GetMaxPairsPerContract(ctx)
events := []sdk.Event{}
// Validation such that only the user who stored the code can register pairs
for _, batchPair := range msg.Batchcontractpair {
contractAddr := batchPair.ContractAddr
existingPairCount := uint64(len(k.GetAllRegisteredPairs(ctx, contractAddr)))
if existingPairCount >= maxPairsPerContract {
return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "contract %s already has %d pairs registered", contractAddr, existingPairCount)
}
contractInfo, err := k.GetContract(ctx, contractAddr)
if err != nil {
return nil, err
}
if msg.Creator != contractInfo.Creator {
return nil, sdkerrors.ErrUnauthorized
}
// Loop through each batch contract pair an individual contract pair, token pair
// tuple and register them individually
for _, pair := range batchPair.Pairs {
k.AddRegisteredPair(ctx, contractAddr, *pair)
events = append(events, sdk.NewEvent(
types.EventTypeRegisterPair,
sdk.NewAttribute(types.AttributeKeyContractAddress, contractAddr),
sdk.NewAttribute(types.AttributeKeyPriceDenom, pair.PriceDenom),
sdk.NewAttribute(types.AttributeKeyAssetDenom, pair.AssetDenom),
))
}
}
ctx.EventManager().EmitEvents(events)
return &types.MsgRegisterPairsResponse{}, nil
}