github.com/Finschia/finschia-sdk@v0.48.1/x/distribution/types/params.go (about) 1 package types 2 3 import ( 4 "fmt" 5 6 yaml "gopkg.in/yaml.v2" 7 8 sdk "github.com/Finschia/finschia-sdk/types" 9 paramtypes "github.com/Finschia/finschia-sdk/x/params/types" 10 ) 11 12 // Parameter keys 13 var ( 14 ParamStoreKeyCommunityTax = []byte("communitytax") 15 ParamStoreKeyBaseProposerReward = []byte("baseproposerreward") 16 ParamStoreKeyBonusProposerReward = []byte("bonusproposerreward") 17 ParamStoreKeyWithdrawAddrEnabled = []byte("withdrawaddrenabled") 18 ) 19 20 // ParamKeyTable returns the parameter key table. 21 func ParamKeyTable() paramtypes.KeyTable { 22 return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) 23 } 24 25 // DefaultParams returns default distribution parameters 26 func DefaultParams() Params { 27 return Params{ 28 CommunityTax: sdk.NewDecWithPrec(2, 2), // 2% 29 BaseProposerReward: sdk.NewDecWithPrec(1, 2), // 1% 30 BonusProposerReward: sdk.NewDecWithPrec(4, 2), // 4% 31 WithdrawAddrEnabled: true, 32 } 33 } 34 35 func (p Params) String() string { 36 out, _ := yaml.Marshal(p) 37 return string(out) 38 } 39 40 // ParamSetPairs returns the parameter set pairs. 41 func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { 42 return paramtypes.ParamSetPairs{ 43 paramtypes.NewParamSetPair(ParamStoreKeyCommunityTax, &p.CommunityTax, validateCommunityTax), 44 paramtypes.NewParamSetPair(ParamStoreKeyBaseProposerReward, &p.BaseProposerReward, validateBaseProposerReward), 45 paramtypes.NewParamSetPair(ParamStoreKeyBonusProposerReward, &p.BonusProposerReward, validateBonusProposerReward), 46 paramtypes.NewParamSetPair(ParamStoreKeyWithdrawAddrEnabled, &p.WithdrawAddrEnabled, validateWithdrawAddrEnabled), 47 } 48 } 49 50 // ValidateBasic performs basic validation on distribution parameters. 51 func (p Params) ValidateBasic() error { 52 if p.CommunityTax.IsNegative() || p.CommunityTax.GT(sdk.OneDec()) { 53 return fmt.Errorf( 54 "community tax should be non-negative and less than one: %s", p.CommunityTax, 55 ) 56 } 57 if p.BaseProposerReward.IsNegative() { 58 return fmt.Errorf( 59 "base proposer reward should be positive: %s", p.BaseProposerReward, 60 ) 61 } 62 if p.BonusProposerReward.IsNegative() { 63 return fmt.Errorf( 64 "bonus proposer reward should be positive: %s", p.BonusProposerReward, 65 ) 66 } 67 if v := p.BaseProposerReward.Add(p.BonusProposerReward).Add(p.CommunityTax); v.GT(sdk.OneDec()) { 68 return fmt.Errorf( 69 "sum of base, bonus proposer rewards, and community tax cannot be greater than one: %s", v, 70 ) 71 } 72 73 return nil 74 } 75 76 func validateCommunityTax(i interface{}) error { 77 v, ok := i.(sdk.Dec) 78 if !ok { 79 return fmt.Errorf("invalid parameter type: %T", i) 80 } 81 82 if v.IsNil() { 83 return fmt.Errorf("community tax must be not nil") 84 } 85 if v.IsNegative() { 86 return fmt.Errorf("community tax must be positive: %s", v) 87 } 88 if v.GT(sdk.OneDec()) { 89 return fmt.Errorf("community tax too large: %s", v) 90 } 91 92 return nil 93 } 94 95 func validateBaseProposerReward(i interface{}) error { 96 v, ok := i.(sdk.Dec) 97 if !ok { 98 return fmt.Errorf("invalid parameter type: %T", i) 99 } 100 101 if v.IsNil() { 102 return fmt.Errorf("base proposer reward must be not nil") 103 } 104 if v.IsNegative() { 105 return fmt.Errorf("base proposer reward must be positive: %s", v) 106 } 107 if v.GT(sdk.OneDec()) { 108 return fmt.Errorf("base proposer reward too large: %s", v) 109 } 110 111 return nil 112 } 113 114 func validateBonusProposerReward(i interface{}) error { 115 v, ok := i.(sdk.Dec) 116 if !ok { 117 return fmt.Errorf("invalid parameter type: %T", i) 118 } 119 120 if v.IsNil() { 121 return fmt.Errorf("bonus proposer reward must be not nil") 122 } 123 if v.IsNegative() { 124 return fmt.Errorf("bonus proposer reward must be positive: %s", v) 125 } 126 if v.GT(sdk.OneDec()) { 127 return fmt.Errorf("bonus proposer reward too large: %s", v) 128 } 129 130 return nil 131 } 132 133 func validateWithdrawAddrEnabled(i interface{}) error { 134 _, ok := i.(bool) 135 if !ok { 136 return fmt.Errorf("invalid parameter type: %T", i) 137 } 138 139 return nil 140 }