/
params.go
103 lines (90 loc) · 3.06 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
package types
import (
"fmt"
"time"
sdk "github.com/cosmos/cosmos-sdk/types"
params "github.com/cosmos/cosmos-sdk/x/params/types"
)
var (
ParamsStoreKeyTaskParams = []byte("taskparams")
ParamsStoreKeyPoolParams = []byte("poolparams")
)
// Default parameters
var (
MinScore = sdk.NewInt(0)
MaxScore = sdk.NewInt(100)
DefaultThresholdScore = sdk.NewInt(50)
DefaultAggregationResult = sdk.NewInt(50)
DefaultExpirationDuration = time.Duration(24) * time.Hour
DefaultAggregationWindow = int64(20)
DefaultEpsilon1 = sdk.NewInt(1)
DefaultEpsilon2 = sdk.NewInt(100)
DefaultShortcutQuorum = sdk.NewDecWithPrec(50, 2)
DefaultLockedInBlocks = int64(30)
DefaultMinimumCollateral = int64(50000)
)
// ParamKeyTable is the key declaration for parameters.
func ParamKeyTable() params.KeyTable {
return params.NewKeyTable(
params.NewParamSetPair(ParamsStoreKeyTaskParams, TaskParams{}, validateTaskParams),
params.NewParamSetPair(ParamsStoreKeyPoolParams, LockedPoolParams{}, validatePoolParams),
)
}
// NewTaskParams returns a TaskParams object.
func NewTaskParams(expirationDuration time.Duration, aggregationWindow int64, aggregationResult,
thresholdScore, epsilon1, epsilon2 sdk.Int, shortcutQuorum sdk.Dec) TaskParams {
return TaskParams{
ExpirationDuration: expirationDuration,
AggregationWindow: aggregationWindow,
AggregationResult: aggregationResult,
ThresholdScore: thresholdScore,
Epsilon1: epsilon1,
Epsilon2: epsilon2,
ShortcutQuorum: shortcutQuorum,
}
}
// DefaultTaskParams generates default set for TaskParams.
func DefaultTaskParams() TaskParams {
return NewTaskParams(DefaultExpirationDuration, DefaultAggregationWindow,
DefaultAggregationResult, DefaultThresholdScore, DefaultEpsilon1, DefaultEpsilon2, DefaultShortcutQuorum)
}
func validateTaskParams(i interface{}) error {
taskParams, ok := i.(TaskParams)
if !ok {
return fmt.Errorf("invalid parameter type: %T", i)
}
if taskParams.ExpirationDuration < 0 ||
taskParams.AggregationWindow < 0 ||
taskParams.ThresholdScore.GT(MaxScore) ||
taskParams.Epsilon1.LT(sdk.NewInt(0)) ||
taskParams.Epsilon2.LT(sdk.NewInt(0)) ||
taskParams.ShortcutQuorum.LTE(sdk.ZeroDec()) ||
taskParams.ShortcutQuorum.GT(sdk.OneDec()) {
return ErrInvalidTaskParams
}
return nil
}
// NewLockedPoolParams returns a LockedPoolParams object.
func NewLockedPoolParams(lockedInBlocks, minimumCollateral int64) LockedPoolParams {
return LockedPoolParams{
LockedInBlocks: lockedInBlocks,
MinimumCollateral: minimumCollateral,
}
}
// DefaultLockedPoolParams generates default set for LockedPoolParams
func DefaultLockedPoolParams() LockedPoolParams {
return NewLockedPoolParams(DefaultLockedInBlocks, DefaultMinimumCollateral)
}
func validatePoolParams(i interface{}) error {
poolParams, ok := i.(LockedPoolParams)
if !ok {
return fmt.Errorf("invalid parameter type: %T", i)
}
if poolParams.LockedInBlocks < 0 {
return ErrInvalidPoolParams
}
if poolParams.MinimumCollateral < 0 {
return ErrInvalidPoolParams
}
return nil
}