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  }