github.com/Finschia/finschia-sdk@v0.48.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 89 if v.IsNegative() { 90 return fmt.Errorf("min signed per window cannot be negative: %s", v) 91 } 92 if v.GT(sdk.OneDec()) { 93 return fmt.Errorf("min signed per window too large: %s", v) 94 } 95 96 return nil 97 } 98 99 func validateDowntimeJailDuration(i interface{}) error { 100 v, ok := i.(time.Duration) 101 if !ok { 102 return fmt.Errorf("invalid parameter type: %T", i) 103 } 104 105 if v <= 0 { 106 return fmt.Errorf("downtime jail duration must be positive: %s", v) 107 } 108 109 return nil 110 } 111 112 func validateSlashFractionDoubleSign(i interface{}) error { 113 v, ok := i.(sdk.Dec) 114 if !ok { 115 return fmt.Errorf("invalid parameter type: %T", i) 116 } 117 118 if v.IsNegative() { 119 return fmt.Errorf("double sign slash fraction cannot be negative: %s", v) 120 } 121 if v.GT(sdk.OneDec()) { 122 return fmt.Errorf("double sign slash fraction too large: %s", v) 123 } 124 125 return nil 126 } 127 128 func validateSlashFractionDowntime(i interface{}) error { 129 v, ok := i.(sdk.Dec) 130 if !ok { 131 return fmt.Errorf("invalid parameter type: %T", i) 132 } 133 134 if v.IsNegative() { 135 return fmt.Errorf("downtime slash fraction cannot be negative: %s", v) 136 } 137 if v.GT(sdk.OneDec()) { 138 return fmt.Errorf("downtime slash fraction too large: %s", v) 139 } 140 141 return nil 142 }