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

     1  package types
     2  
     3  import (
     4  	"fmt"
     5  
     6  	sdk "github.com/cosmos/cosmos-sdk/types"
     7  	paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
     8  	"github.com/pkg/errors"
     9  )
    10  
    11  var _ paramtypes.ParamSet = &Params{}
    12  
    13  // MaxNumOracles denotes number of oracles the offchain reporting protocol is designed for
    14  var MaxNumOracles = 31
    15  
    16  // Parameter keys
    17  var (
    18  	KeyLinkDenom      = []byte("LinkDenom")
    19  	KeyPayoutInterval = []byte("PayoutInterval")
    20  	KeyModuleAdmin    = []byte("ModuleAdmin")
    21  )
    22  
    23  // ParamKeyTable returns the parameter key table.
    24  func ParamKeyTable() paramtypes.KeyTable {
    25  	return paramtypes.NewKeyTable().RegisterParamSet(&Params{})
    26  }
    27  
    28  // NewParams creates a new Params instance
    29  func NewParams(
    30  	linkDenom string,
    31  	payoutInterval uint64,
    32  	moduleAdmin sdk.AccAddress,
    33  ) Params {
    34  	return Params{
    35  		LinkDenom:           linkDenom,
    36  		PayoutBlockInterval: payoutInterval,
    37  		ModuleAdmin:         moduleAdmin.String(),
    38  	}
    39  }
    40  
    41  // ParamSetPairs returns the parameter set pairs.
    42  func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs {
    43  	return paramtypes.ParamSetPairs{
    44  		paramtypes.NewParamSetPair(KeyLinkDenom, &p.LinkDenom, validateLinkDenom),
    45  		paramtypes.NewParamSetPair(KeyPayoutInterval, &p.PayoutBlockInterval, validatePayoutInterval),
    46  		paramtypes.NewParamSetPair(KeyModuleAdmin, &p.ModuleAdmin, validateModuleAdmin),
    47  	}
    48  }
    49  
    50  // DefaultParams returns a default set of parameters.
    51  func DefaultParams() Params {
    52  	return Params{
    53  		LinkDenom:           "peggy0x514910771AF9Ca656af840dff83E8264EcF986CA",
    54  		PayoutBlockInterval: 100000,
    55  		ModuleAdmin:         "",
    56  	}
    57  }
    58  
    59  // Validate performs basic validation on insurance parameters.
    60  func (p Params) Validate() error {
    61  	if err := validateLinkDenom(p.LinkDenom); err != nil {
    62  		return err
    63  	}
    64  
    65  	return nil
    66  }
    67  
    68  func validateLinkDenom(i interface{}) error {
    69  	v, ok := i.(string)
    70  	if !ok {
    71  		return errors.Errorf("invalid parameter type: %T", i)
    72  	}
    73  
    74  	if v == "" {
    75  		return errors.Errorf("linkDenom param cannot be empty: %v", v)
    76  	}
    77  
    78  	return nil
    79  }
    80  
    81  func validatePayoutInterval(i interface{}) error {
    82  	v, ok := i.(uint64)
    83  	if !ok {
    84  		return fmt.Errorf("invalid parameter type: %T", i)
    85  	}
    86  
    87  	if v == 0 {
    88  		return fmt.Errorf("PayoutInterval must be positive: %d", v)
    89  	}
    90  
    91  	return nil
    92  }
    93  
    94  func validateModuleAdmin(i interface{}) error {
    95  	v, ok := i.(string)
    96  	if !ok {
    97  		return fmt.Errorf("invalid parameter type: %T", i)
    98  	}
    99  
   100  	if v == "" {
   101  		return nil
   102  	}
   103  
   104  	if _, err := sdk.AccAddressFromBech32(v); err != nil {
   105  		return err
   106  	}
   107  
   108  	return nil
   109  }