-
Notifications
You must be signed in to change notification settings - Fork 205
/
params.go
121 lines (99 loc) · 3.36 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
package types
import (
"fmt"
sdk "github.com/cosmos/cosmos-sdk/types"
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
"gopkg.in/yaml.v2"
)
var _ paramtypes.ParamSet = (*Params)(nil)
var (
KeyEpochBlocksOverlap = []byte("EpochBlocksOverlap")
// TODO: Determine the default value
DefaultEpochBlocksOverlap uint64 = 4
)
var (
KeyQoSWeight = []byte("QoSWeight")
DefaultQoSWeight sdk.Dec = sdk.NewDecWithPrec(5, 1) // 0.5
)
var (
KeyRecommendedEpochNumToCollectPayment = []byte("RecommendedEpochNumToCollectPayment") // the recommended amount of max epochs that a provider should wait before collecting its payment (if he'll collect later, there's a higher chance to get punished)
DefaultRecommendedEpochNumToCollectPayment uint64 = 3
)
// 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(
epochBlocksOverlap uint64,
qoSWeight sdk.Dec,
recommendedEpochNumToCollectPayment uint64,
) Params {
return Params{
EpochBlocksOverlap: epochBlocksOverlap,
QoSWeight: qoSWeight,
RecommendedEpochNumToCollectPayment: recommendedEpochNumToCollectPayment,
}
}
// DefaultParams returns a default set of parameters
func DefaultParams() Params {
return NewParams(
DefaultEpochBlocksOverlap,
DefaultQoSWeight,
DefaultRecommendedEpochNumToCollectPayment,
)
}
// ParamSetPairs get the params.ParamSet
func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs {
return paramtypes.ParamSetPairs{
paramtypes.NewParamSetPair(KeyEpochBlocksOverlap, &p.EpochBlocksOverlap, validateEpochBlocksOverlap),
paramtypes.NewParamSetPair(KeyQoSWeight, &p.QoSWeight, validateQoSWeight),
paramtypes.NewParamSetPair(KeyRecommendedEpochNumToCollectPayment, &p.RecommendedEpochNumToCollectPayment, validateRecommendedEpochNumToCollectPayment),
}
}
// Validate validates the set of params
func (p Params) Validate() error {
if err := validateEpochBlocksOverlap(p.EpochBlocksOverlap); err != nil {
return err
}
if err := validateRecommendedEpochNumToCollectPayment(p.RecommendedEpochNumToCollectPayment); err != nil {
return err
}
return nil
}
// String implements the Stringer interface.
func (p Params) String() string {
out, _ := yaml.Marshal(p)
return string(out)
}
// validateEpochBlocksOverlap validates the EpochBlocksOverlap param
func validateEpochBlocksOverlap(v interface{}) error {
epochBlocksOverlap, ok := v.(uint64)
if !ok {
return fmt.Errorf("invalid parameter type: %T", v)
}
// TODO implement validation
_ = epochBlocksOverlap
return nil
}
// validateDataReliabilityReward validates the param
func validateQoSWeight(v interface{}) error {
QoSWeight, ok := v.(sdk.Dec)
if !ok {
return fmt.Errorf("invalid parameter type: %T", v)
}
if QoSWeight.GT(sdk.OneDec()) || QoSWeight.LT(sdk.ZeroDec()) {
return fmt.Errorf("invalid parameter QoSWeight")
}
return nil
}
// validateRecommendedEpochNumToCollectPayment validates the RecommendedEpochNumToCollectPayment param
func validateRecommendedEpochNumToCollectPayment(v interface{}) error {
recommendedEpochNumToCollectPayment, ok := v.(uint64)
if !ok {
return fmt.Errorf("invalid parameter type: %T", v)
}
// TODO implement validation
_ = recommendedEpochNumToCollectPayment
return nil
}