-
Notifications
You must be signed in to change notification settings - Fork 568
/
params.go
136 lines (112 loc) · 4.05 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
package types
import (
fmt "fmt"
time "time"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/osmosis-labs/osmosis/osmoutils"
cltypes "github.com/osmosis-labs/osmosis/v24/x/concentrated-liquidity/types"
epochtypes "github.com/osmosis-labs/osmosis/x/epochs/types"
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
)
// Incentives parameters key store.
var (
KeyDistrEpochIdentifier = []byte("DistrEpochIdentifier")
KeyGroupCreationFee = []byte("GroupCreationFee")
KeyCreatorWhitelist = []byte("CreatorWhitelist")
KeyInternalUptime = []byte("InternalUptime")
KeyMinValueForDistr = []byte("MinValueForDistr")
// 100 OSMO
DefaultGroupCreationFee = sdk.NewCoins(sdk.NewCoin("uosmo", sdk.NewInt(100_000_000)))
)
// ParamKeyTable returns the key table for the incentive module's parameters.
func ParamKeyTable() paramtypes.KeyTable {
return paramtypes.NewKeyTable().RegisterParamSet(&Params{})
}
// NewParams takes an epoch distribution identifier and group creation fee, then returns an incentives Params struct.
func NewParams(distrEpochIdentifier string, groupCreationFee sdk.Coins, internalUptime time.Duration, minValueForDistr sdk.Coin) Params {
return Params{
DistrEpochIdentifier: distrEpochIdentifier,
GroupCreationFee: groupCreationFee,
UnrestrictedCreatorWhitelist: []string{},
InternalUptime: internalUptime,
MinValueForDistribution: minValueForDistr,
}
}
// DefaultParams returns the default incentives module parameters.
func DefaultParams() Params {
return Params{
DistrEpochIdentifier: "week",
GroupCreationFee: DefaultGroupCreationFee,
UnrestrictedCreatorWhitelist: []string{},
InternalUptime: DefaultConcentratedUptime,
MinValueForDistribution: DefaultMinValueForDistr,
}
}
// Validate checks that the incentives module parameters are valid.
func (p Params) Validate() error {
if err := epochtypes.ValidateEpochIdentifierInterface(p.DistrEpochIdentifier); err != nil {
return err
}
if err := ValidateGroupCreaionFee(p.GroupCreationFee); err != nil {
return err
}
if err := osmoutils.ValidateAddressList(p.UnrestrictedCreatorWhitelist); err != nil {
return err
}
if err := ValidateInternalUptime(p.InternalUptime); err != nil {
return err
}
if err := ValidateMinValueForDistr(p.MinValueForDistribution); err != nil {
return err
}
return nil
}
func ValidateGroupCreaionFee(i interface{}) error {
v, ok := i.(sdk.Coins)
if !ok {
return fmt.Errorf("invalid parameter type: %T", i)
}
return v.Validate()
}
func ValidateGroupCreationFee(i interface{}) error {
v, ok := i.(sdk.Coins)
if !ok {
return fmt.Errorf("invalid parameter type: %T", i)
}
return v.Validate()
}
func ValidateInternalUptime(i interface{}) error {
internalUptime, ok := i.(time.Duration)
if !ok {
return fmt.Errorf("invalid parameter type: %T", i)
}
supported := false
for _, supportedUptime := range cltypes.SupportedUptimes {
if internalUptime == supportedUptime {
supported = true
// We break here to save on iterations
break
}
}
if !supported {
return cltypes.UptimeNotSupportedError{Uptime: internalUptime}
}
return nil
}
func ValidateMinValueForDistr(i interface{}) error {
_, ok := i.(sdk.Coin)
if !ok {
return fmt.Errorf("invalid parameter type: %T", i)
}
return nil
}
// ParamSetPairs takes the parameter struct and associates the paramsubspace key and field of the parameters as a KVStore.
func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs {
return paramtypes.ParamSetPairs{
paramtypes.NewParamSetPair(KeyDistrEpochIdentifier, &p.DistrEpochIdentifier, epochtypes.ValidateEpochIdentifierInterface),
paramtypes.NewParamSetPair(KeyGroupCreationFee, &p.GroupCreationFee, ValidateGroupCreaionFee),
paramtypes.NewParamSetPair(KeyCreatorWhitelist, &p.UnrestrictedCreatorWhitelist, osmoutils.ValidateAddressList),
paramtypes.NewParamSetPair(KeyInternalUptime, &p.InternalUptime, ValidateInternalUptime),
paramtypes.NewParamSetPair(KeyMinValueForDistr, &p.MinValueForDistribution, ValidateMinValueForDistr),
}
}