/
ticket.go
86 lines (66 loc) · 2.09 KB
/
ticket.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
74
75
76
77
78
79
80
81
82
83
84
85
86
package types
import (
"strings"
sdkerrors "cosmossdk.io/errors"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/sge-network/sge/utils"
)
// Validate validates fields of the given ticketData
func (payload *WagerTicketPayload) Validate(creator string) error {
if payload.SelectedOdds == nil {
return ErrOddsDataNotFound
}
if OddsType_ODDS_TYPE_UNSPECIFIED > payload.Meta.SelectedOddsType ||
OddsType_ODDS_TYPE_MONEYLINE < payload.Meta.SelectedOddsType {
return sdkerrors.Wrapf(ErrMetaOddsType, "%s", payload.Meta.SelectedOddsType)
}
if err := payload.ValidateOdds(); err != nil {
return sdkerrors.Wrapf(err, "%s", payload.SelectedOdds.UID)
}
for _, odd := range payload.AllOdds {
if err := payload.ValidateCompactOdds(*odd); err != nil {
return sdkerrors.Wrapf(err, "%s", odd.UID)
}
}
if !payload.KycData.Validate(creator) {
return sdkerrors.Wrapf(ErrUserKycFailed, "%s", creator)
}
return nil
}
func (payload *WagerTicketPayload) ValidateOdds() error {
if !utils.IsValidUID(payload.SelectedOdds.MarketUID) {
return ErrInvalidMarketUID
}
if !utils.IsValidUID(payload.SelectedOdds.UID) {
return ErrInvalidOddsUID
}
if len(strings.TrimSpace(payload.SelectedOdds.Value)) == 0 {
return ErrEmptyOddsValue
}
if payload.SelectedOdds.MaxLossMultiplier.IsNil() || payload.SelectedOdds.MaxLossMultiplier.LTE(sdk.ZeroDec()) {
return ErrMaxLossMultiplierCanNotBeZero
}
if payload.SelectedOdds.MaxLossMultiplier.GT(sdk.OneDec()) {
return ErrMaxLossMultiplierCanNotBeMoreThanOne
}
return nil
}
func (payload *WagerTicketPayload) ValidateCompactOdds(odds BetOddsCompact) error {
if !utils.IsValidUID(odds.UID) {
return ErrInvalidOddsUID
}
if odds.MaxLossMultiplier.IsNil() || odds.MaxLossMultiplier.LTE(sdk.ZeroDec()) {
return ErrMaxLossMultiplierCanNotBeZero
}
if odds.MaxLossMultiplier.GT(sdk.OneDec()) {
return ErrMaxLossMultiplierCanNotBeMoreThanOne
}
return nil
}
func (payload *WagerTicketPayload) OddsMap() map[string]*BetOddsCompact {
oddMap := make(map[string]*BetOddsCompact)
for _, odd := range payload.AllOdds {
oddMap[odd.UID] = odd
}
return oddMap
}