github.com/InjectiveLabs/sdk-go@v1.53.0/chain/auction/types/params.go (about)

     1  package types
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"cosmossdk.io/math"
     7  	paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
     8  )
     9  
    10  var _ paramtypes.ParamSet = &Params{}
    11  
    12  // Auction params default values
    13  var (
    14  	// DefaultAuctionPeriod represents the number of seconds in 1 week
    15  	DefaultAuctionPeriod int64 = 60 * 60 * 24 * 7
    16  	// DefaultMinNextBidIncrementRate represents default min increment rate 0.25%
    17  	DefaultMinNextBidIncrementRate = math.LegacyNewDecWithPrec(25, 4)
    18  )
    19  
    20  // Parameter keys
    21  var (
    22  	KeyAuctionPeriod           = []byte("AuctionPeriod")
    23  	KeyMinNextBidIncrementRate = []byte("MinNextBidIncrementRate")
    24  )
    25  
    26  // ParamKeyTable returns the parameter key table.
    27  func ParamKeyTable() paramtypes.KeyTable {
    28  	return paramtypes.NewKeyTable().RegisterParamSet(&Params{})
    29  }
    30  
    31  // NewParams creates a new Params instance
    32  func NewParams(
    33  	auctionPeriod int64,
    34  	minNextBidIncrementRate math.LegacyDec,
    35  ) Params {
    36  	return Params{
    37  		AuctionPeriod:           auctionPeriod,
    38  		MinNextBidIncrementRate: minNextBidIncrementRate,
    39  	}
    40  }
    41  
    42  // ParamSetPairs returns the parameter set pairs.
    43  func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs {
    44  	return paramtypes.ParamSetPairs{
    45  		paramtypes.NewParamSetPair(KeyAuctionPeriod, &p.AuctionPeriod, validateAuctionPeriodDuration),
    46  		paramtypes.NewParamSetPair(KeyMinNextBidIncrementRate, &p.MinNextBidIncrementRate, validateMinNextBidIncrementRate),
    47  	}
    48  }
    49  
    50  // DefaultParams returns a default set of parameters.
    51  func DefaultParams() Params {
    52  	return Params{
    53  		AuctionPeriod:           DefaultAuctionPeriod,
    54  		MinNextBidIncrementRate: DefaultMinNextBidIncrementRate,
    55  	}
    56  }
    57  
    58  // Validate performs basic validation on auction parameters.
    59  func (p Params) Validate() error {
    60  	if err := validateAuctionPeriodDuration(p.AuctionPeriod); err != nil {
    61  		return err
    62  	}
    63  
    64  	if err := validateMinNextBidIncrementRate(p.MinNextBidIncrementRate); err != nil {
    65  		return err
    66  	}
    67  
    68  	return nil
    69  }
    70  
    71  func validateAuctionPeriodDuration(i interface{}) error {
    72  	v, ok := i.(int64)
    73  	if !ok {
    74  		return fmt.Errorf("invalid parameter type: %T", i)
    75  	}
    76  
    77  	if v == 0 {
    78  		return fmt.Errorf("AuctionPeriodDuration must be positive: %d", v)
    79  	}
    80  
    81  	return nil
    82  }
    83  
    84  func validateMinNextBidIncrementRate(i interface{}) error {
    85  	v, ok := i.(math.LegacyDec)
    86  	if !ok {
    87  		return fmt.Errorf("invalid parameter type: %T", i)
    88  	}
    89  
    90  	if v.IsNil() {
    91  		return fmt.Errorf("MinNextBidIncrementRate cannot be nil")
    92  	}
    93  
    94  	if v.Equal(math.LegacyZeroDec()) {
    95  		return fmt.Errorf("MinNextBidIncrementRate must be positive: %s", v.String())
    96  	}
    97  
    98  	if v.GT(math.LegacyNewDecWithPrec(2, 1)) { // > 20%
    99  		return fmt.Errorf("MinNextBidIncrementRate must be equal or less than 20 percent: %s", v.String())
   100  	}
   101  
   102  	return nil
   103  }