/
params.go
132 lines (116 loc) · 3.64 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
package types
import (
"fmt"
yaml "gopkg.in/yaml.v2"
sdk "github.com/cosmos/cosmos-sdk/types"
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
)
var (
// KeyIbcCroDenom is store's key for the IBC Cro denomination
KeyIbcCroDenom = []byte("IbcCroDenom")
// KeyIbcTimeout is store's key for the IBC Timeout
KeyIbcTimeout = []byte("IbcTimeout")
// KeyCronosAdmin is store's key for the admin address
KeyCronosAdmin = []byte("CronosAdmin")
// KeyEnableAutoDeployment is store's key for the EnableAutoDeployment
KeyEnableAutoDeployment = []byte("EnableAutoDeployment")
// KeyMaxCallbackGas is store's key for the MaxCallbackGas
KeyMaxCallbackGas = []byte("MaxCallbackGas")
)
const (
IbcCroDenomDefaultValue = "ibc/6B5A664BF0AF4F71B2F0BAA33141E2F1321242FBD5D19762F541EC971ACB0865"
IbcTimeoutDefaultValue = uint64(86400000000000) // 1 day
MaxCallbackGasDefaultValue = uint64(50000)
)
// ParamKeyTable returns the parameter key table.
func ParamKeyTable() paramtypes.KeyTable {
return paramtypes.NewKeyTable().RegisterParamSet(&Params{})
}
// NewParams creates a new parameter configuration for the cronos module
func NewParams(ibcCroDenom string, ibcTimeout uint64, cronosAdmin string, enableAutoDeployment bool, maxCallbackGas uint64) Params {
return Params{
IbcCroDenom: ibcCroDenom,
IbcTimeout: ibcTimeout,
CronosAdmin: cronosAdmin,
EnableAutoDeployment: enableAutoDeployment,
MaxCallbackGas: maxCallbackGas,
}
}
// DefaultParams is the default parameter configuration for the cronos module
func DefaultParams() Params {
return Params{
IbcCroDenom: IbcCroDenomDefaultValue,
IbcTimeout: IbcTimeoutDefaultValue,
CronosAdmin: "",
EnableAutoDeployment: false,
MaxCallbackGas: MaxCallbackGasDefaultValue,
}
}
// Validate all cronos module parameters
func (p Params) Validate() error {
if err := validateIsUint64(p.IbcTimeout); err != nil {
return err
}
if err := validateIsIbcDenom(p.IbcCroDenom); err != nil {
return err
}
if len(p.CronosAdmin) > 0 {
if _, err := sdk.AccAddressFromBech32(p.CronosAdmin); err != nil {
return err
}
}
if err := validateIsUint64(p.MaxCallbackGas); err != nil {
return err
}
return nil
}
// String implements the fmt.Stringer interface
func (p Params) String() string {
out, _ := yaml.Marshal(p)
return string(out)
}
// ParamSetPairs implements params.ParamSet
func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs {
return paramtypes.ParamSetPairs{
paramtypes.NewParamSetPair(KeyIbcCroDenom, &p.IbcCroDenom, validateIsIbcDenom),
paramtypes.NewParamSetPair(KeyIbcTimeout, &p.IbcTimeout, validateIsUint64),
paramtypes.NewParamSetPair(KeyCronosAdmin, &p.CronosAdmin, validateIsAddress),
paramtypes.NewParamSetPair(KeyEnableAutoDeployment, &p.EnableAutoDeployment, validateIsBool),
paramtypes.NewParamSetPair(KeyMaxCallbackGas, &p.MaxCallbackGas, validateIsUint64),
}
}
func validateIsIbcDenom(i interface{}) error {
s, ok := i.(string)
if !ok {
return fmt.Errorf("invalid parameter type: %T", i)
}
if !IsValidIBCDenom(s) {
return fmt.Errorf("invalid ibc denom: %T", i)
}
return nil
}
func validateIsUint64(i interface{}) error {
if _, ok := i.(uint64); !ok {
return fmt.Errorf("invalid parameter type: %T", i)
}
return nil
}
func validateIsAddress(i interface{}) error {
s, ok := i.(string)
if !ok {
return fmt.Errorf("invalid parameter type: %T", i)
}
if len(s) > 0 {
if _, err := sdk.AccAddressFromBech32(s); err != nil {
return err
}
}
return nil
}
func validateIsBool(i interface{}) error {
_, ok := i.(bool)
if !ok {
return fmt.Errorf("invalid parameter type: %T", i)
}
return nil
}