-
Notifications
You must be signed in to change notification settings - Fork 4
/
params.go
163 lines (135 loc) · 3.82 KB
/
params.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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
package types
import (
"fmt"
"strings"
time "time"
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
"gopkg.in/yaml.v2"
)
var _ paramtypes.ParamSet = (*Params)(nil)
var (
KeyAirdropEnabled = []byte("AirdropEnabled")
DefaultKeyAirdropEnabled bool = true
)
var (
KeyAirdropStartTime = []byte("AirdropStartTime")
DefaultAirdropStartTime time.Time = time.Now()
)
var (
KeyDurationUntilDecay = []byte("DurationUntilDecay")
DefaultDurationUntilDecay time.Duration = time.Hour
)
var (
KeyDurationOfDecay = []byte("DurationOfDecay")
DefaultDurationOfDecay time.Duration = time.Hour * 5
)
var (
KeyClaimDenom = []byte("ClaimDenom")
DefaultClaimDenom string = "clan"
)
// ParamKeyTable the param key table for launch module
func ParamKeyTable() paramtypes.KeyTable {
return paramtypes.NewKeyTable().RegisterParamSet(&Params{})
}
// NewParams creates a new Params instance
func NewParams(enabled bool, claimDenom string, startTime time.Time, durationUntilDecay, durationOfDecay time.Duration) Params {
return Params{
AirdropEnabled: enabled,
ClaimDenom: claimDenom,
AirdropStartTime: startTime,
DurationUntilDecay: durationUntilDecay,
DurationOfDecay: durationOfDecay,
}
}
// DefaultParams returns a default set of parameters
func DefaultParams() Params {
return NewParams(
DefaultKeyAirdropEnabled,
DefaultClaimDenom,
DefaultAirdropStartTime,
DefaultDurationUntilDecay,
DefaultDurationOfDecay,
)
}
// ParamSetPairs get the params.ParamSet
func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs {
return paramtypes.ParamSetPairs{
paramtypes.NewParamSetPair(KeyAirdropEnabled, &p.AirdropEnabled, validateAirdropEnabled),
paramtypes.NewParamSetPair(KeyAirdropStartTime, &p.AirdropStartTime, validateAirdropStartTime),
paramtypes.NewParamSetPair(KeyDurationUntilDecay, &p.DurationUntilDecay, validateDuration),
paramtypes.NewParamSetPair(KeyDurationOfDecay, &p.DurationOfDecay, validateDuration),
paramtypes.NewParamSetPair(KeyClaimDenom, &p.ClaimDenom, validateClaimDenom),
}
}
// Validate validates the set of params
func (p Params) Validate() error {
if err := validateAirdropEnabled(p.AirdropEnabled); err != nil {
return err
}
if err := validateAirdropStartTime(p.AirdropStartTime); err != nil {
return err
}
if err := validateDuration(p.DurationUntilDecay); err != nil {
return err
}
if err := validateDuration(p.DurationOfDecay); err != nil {
return err
}
if err := validateClaimDenom(p.ClaimDenom); err != nil {
return err
}
return nil
}
func (p Params) IsAirdropEnabled(t time.Time) bool {
if !p.AirdropEnabled {
return false
}
if p.AirdropStartTime.IsZero() {
return false
}
if t.Before(p.AirdropStartTime) {
return false
}
return true
}
// String implements the Stringer interface.
func (p Params) String() string {
out, _ := yaml.Marshal(p)
return string(out)
}
func validateAirdropEnabled(i interface{}) error {
_, ok := i.(bool)
if !ok {
return fmt.Errorf("invalid parameter type: %T", i)
}
return nil
}
// validateAirdropStartTime validates the AirdropStartTime param
func validateAirdropStartTime(v interface{}) error {
_, ok := v.(time.Time)
if !ok {
return fmt.Errorf("invalid parameter type: %T", v)
}
return nil
}
func validateDuration(v interface{}) error {
duration, ok := v.(time.Duration)
if !ok {
return fmt.Errorf("invalid parameter type: %T", v)
}
if duration < 1 {
return fmt.Errorf("duration must be greater than or equal to 1: %d", duration)
}
return nil
}
// validateClaimDenom validates the ClaimDenom param
func validateClaimDenom(v interface{}) error {
claimDenom, ok := v.(string)
if !ok {
return fmt.Errorf("invalid parameter type: %T", v)
}
if strings.TrimSpace(claimDenom) == "" {
return fmt.Errorf("invalid denom: %s", v)
}
return nil
}