/
types.go
73 lines (63 loc) · 2.05 KB
/
types.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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package types
import (
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
)
func CheckReserveTokenNames(resTokens []string, token string) error {
// Check that no token is the same as the main token, no token
// is duplicate, and that the token is a valid denomination
uniqueReserveTokens := make(map[string]string)
for _, r := range resTokens {
// Check if same as main token
if r == token {
return ErrBondTokenCannotAlsoBeReserveToken
}
// Check if duplicate
if _, ok := uniqueReserveTokens[r]; ok {
return ErrDuplicateReserveToken
} else {
uniqueReserveTokens[r] = ""
}
// Check if can be parsed as coin
err := CheckCoinDenom(r)
if err != nil {
return err
}
}
return nil
}
func CheckNoOfReserveTokens(resTokens []string, fnType string) error {
// Come up with number of expected reserve tokens
expectedNoOfTokens, ok := NoOfReserveTokensForFunctionType[fnType]
if !ok {
return sdkerrors.Wrap(ErrUnrecognizedFunctionType, fnType)
}
// Check that number of reserve tokens is correct (if expecting a specific number of tokens)
if expectedNoOfTokens != AnyNumberOfReserveTokens && len(resTokens) != expectedNoOfTokens {
return sdkerrors.Wrapf(ErrIncorrectNumberOfReserveTokens, "expected: %d", expectedNoOfTokens)
}
return nil
}
func CheckCoinDenom(denom string) (err error) {
coin, err := sdk.ParseCoinNormalized("0" + denom)
if err != nil {
return err
} else if denom != coin.Denom {
return sdkerrors.Wrapf(sdkerrors.ErrInvalidCoins, coin.String())
}
return nil
}
func GetRequiredParamsForFunctionType(fnType string) (fnParams []string, err error) {
expectedParams, ok := RequiredParamsForFunctionType[fnType]
if !ok {
return nil, sdkerrors.Wrap(ErrUnrecognizedFunctionType, fnType)
}
return expectedParams, nil
}
func GetExceptionsForFunctionType(fnType string) (restrictions FunctionParamRestrictions, err error) {
restrictions, ok := ExtraParameterRestrictions[fnType]
if !ok {
return nil, sdkerrors.Wrap(ErrUnrecognizedFunctionType, fnType)
}
return restrictions, nil
}