github.com/Finschia/finschia-sdk@v0.49.1/x/slashing/types/params.go (about) 1 package types 2 3 import ( 4 "fmt" 5 "time" 6 7 sdk "github.com/Finschia/finschia-sdk/types" 8 paramtypes "github.com/Finschia/finschia-sdk/x/params/types" 9 ) 10 11 // Default parameter namespace 12 const ( 13 DefaultSignedBlocksWindow = int64(100) 14 DefaultDowntimeJailDuration = 60 * 10 * time.Second 15 ) 16 17 var ( 18 DefaultMinSignedPerWindow = sdk.NewDecWithPrec(5, 1) 19 DefaultSlashFractionDoubleSign = sdk.NewDec(1).Quo(sdk.NewDec(20)) 20 DefaultSlashFractionDowntime = sdk.NewDec(1).Quo(sdk.NewDec(100)) 21 ) 22 23 // Parameter store keys 24 var ( 25 KeySignedBlocksWindow = []byte("SignedBlocksWindow") 26 KeyMinSignedPerWindow = []byte("MinSignedPerWindow") 27 KeyDowntimeJailDuration = []byte("DowntimeJailDuration") 28 KeySlashFractionDoubleSign = []byte("SlashFractionDoubleSign") 29 KeySlashFractionDowntime = []byte("SlashFractionDowntime") 30 ) 31 32 // ParamKeyTable for slashing module 33 func ParamKeyTable() paramtypes.KeyTable { 34 return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) 35 } 36 37 // NewParams creates a new Params object 38 func NewParams( 39 signedBlocksWindow int64, minSignedPerWindow sdk.Dec, downtimeJailDuration time.Duration, 40 slashFractionDoubleSign, slashFractionDowntime sdk.Dec, 41 ) Params { 42 return Params{ 43 SignedBlocksWindow: signedBlocksWindow, 44 MinSignedPerWindow: minSignedPerWindow, 45 DowntimeJailDuration: downtimeJailDuration, 46 SlashFractionDoubleSign: slashFractionDoubleSign, 47 SlashFractionDowntime: slashFractionDowntime, 48 } 49 } 50 51 // ParamSetPairs - Implements params.ParamSet 52 func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { 53 return paramtypes.ParamSetPairs{ 54 paramtypes.NewParamSetPair(KeySignedBlocksWindow, &p.SignedBlocksWindow, validateSignedBlocksWindow), 55 paramtypes.NewParamSetPair(KeyMinSignedPerWindow, &p.MinSignedPerWindow, validateMinSignedPerWindow), 56 paramtypes.NewParamSetPair(KeyDowntimeJailDuration, &p.DowntimeJailDuration, validateDowntimeJailDuration), 57 paramtypes.NewParamSetPair(KeySlashFractionDoubleSign, &p.SlashFractionDoubleSign, validateSlashFractionDoubleSign), 58 paramtypes.NewParamSetPair(KeySlashFractionDowntime, &p.SlashFractionDowntime, validateSlashFractionDowntime), 59 } 60 } 61 62 // DefaultParams defines the parameters for this module 63 func DefaultParams() Params { 64 return NewParams( 65 DefaultSignedBlocksWindow, DefaultMinSignedPerWindow, DefaultDowntimeJailDuration, 66 DefaultSlashFractionDoubleSign, DefaultSlashFractionDowntime, 67 ) 68 } 69 70 func validateSignedBlocksWindow(i interface{}) error { 71 v, ok := i.(int64) 72 if !ok { 73 return fmt.Errorf("invalid parameter type: %T", i) 74 } 75 76 if v <= 0 { 77 return fmt.Errorf("signed blocks window must be positive: %d", v) 78 } 79 80 return nil 81 } 82 83 func validateMinSignedPerWindow(i interface{}) error { 84 v, ok := i.(sdk.Dec) 85 if !ok { 86 return fmt.Errorf("invalid parameter type: %T", i) 87 } 88 if v.IsNil() { 89 return fmt.Errorf("min signed per window cannot be nil: %s", v) 90 } 91 if v.IsNegative() { 92 return fmt.Errorf("min signed per window cannot be negative: %s", v) 93 } 94 if v.GT(sdk.OneDec()) { 95 return fmt.Errorf("min signed per window too large: %s", v) 96 } 97 98 return nil 99 } 100 101 func validateDowntimeJailDuration(i interface{}) error { 102 v, ok := i.(time.Duration) 103 if !ok { 104 return fmt.Errorf("invalid parameter type: %T", i) 105 } 106 107 if v <= 0 { 108 return fmt.Errorf("downtime jail duration must be positive: %s", v) 109 } 110 111 return nil 112 } 113 114 func validateSlashFractionDoubleSign(i interface{}) error { 115 v, ok := i.(sdk.Dec) 116 if !ok { 117 return fmt.Errorf("invalid parameter type: %T", i) 118 } 119 if v.IsNil() { 120 return fmt.Errorf("double sign slash fraction cannot be nil: %s", v) 121 } 122 if v.IsNegative() { 123 return fmt.Errorf("double sign slash fraction cannot be negative: %s", v) 124 } 125 if v.GT(sdk.OneDec()) { 126 return fmt.Errorf("double sign slash fraction too large: %s", v) 127 } 128 129 return nil 130 } 131 132 func validateSlashFractionDowntime(i interface{}) error { 133 v, ok := i.(sdk.Dec) 134 if !ok { 135 return fmt.Errorf("invalid parameter type: %T", i) 136 } 137 if v.IsNil() { 138 return fmt.Errorf("downtime slash fraction cannot be nil: %s", v) 139 } 140 if v.IsNegative() { 141 return fmt.Errorf("downtime slash fraction cannot be negative: %s", v) 142 } 143 if v.GT(sdk.OneDec()) { 144 return fmt.Errorf("downtime slash fraction too large: %s", v) 145 } 146 147 return nil 148 }