github.com/cosmos/cosmos-sdk@v0.50.10/x/auth/types/params.go (about)

     1  package types
     2  
     3  import (
     4  	"fmt"
     5  )
     6  
     7  // Default parameter values
     8  const (
     9  	DefaultMaxMemoCharacters      uint64 = 256
    10  	DefaultTxSigLimit             uint64 = 7
    11  	DefaultTxSizeCostPerByte      uint64 = 10
    12  	DefaultSigVerifyCostED25519   uint64 = 590
    13  	DefaultSigVerifyCostSecp256k1 uint64 = 1000
    14  )
    15  
    16  // NewParams creates a new Params object
    17  func NewParams(maxMemoCharacters, txSigLimit, txSizeCostPerByte, sigVerifyCostED25519, sigVerifyCostSecp256k1 uint64) Params {
    18  	return Params{
    19  		MaxMemoCharacters:      maxMemoCharacters,
    20  		TxSigLimit:             txSigLimit,
    21  		TxSizeCostPerByte:      txSizeCostPerByte,
    22  		SigVerifyCostED25519:   sigVerifyCostED25519,
    23  		SigVerifyCostSecp256k1: sigVerifyCostSecp256k1,
    24  	}
    25  }
    26  
    27  // DefaultParams returns a default set of parameters.
    28  func DefaultParams() Params {
    29  	return Params{
    30  		MaxMemoCharacters:      DefaultMaxMemoCharacters,
    31  		TxSigLimit:             DefaultTxSigLimit,
    32  		TxSizeCostPerByte:      DefaultTxSizeCostPerByte,
    33  		SigVerifyCostED25519:   DefaultSigVerifyCostED25519,
    34  		SigVerifyCostSecp256k1: DefaultSigVerifyCostSecp256k1,
    35  	}
    36  }
    37  
    38  // SigVerifyCostSecp256r1 returns gas fee of secp256r1 signature verification.
    39  // Set by benchmarking current implementation:
    40  //
    41  //	BenchmarkSig/secp256k1     4334   277167 ns/op   4128 B/op   79 allocs/op
    42  //	BenchmarkSig/secp256r1    10000   108769 ns/op   1672 B/op   33 allocs/op
    43  //
    44  // Based on the results above secp256k1 is 2.7x is slwer. However we propose to discount it
    45  // because we are we don't compare the cgo implementation of secp256k1, which is faster.
    46  func (p Params) SigVerifyCostSecp256r1() uint64 {
    47  	return p.SigVerifyCostSecp256k1 / 2
    48  }
    49  
    50  func validateTxSigLimit(i interface{}) error {
    51  	v, ok := i.(uint64)
    52  	if !ok {
    53  		return fmt.Errorf("invalid parameter type: %T", i)
    54  	}
    55  
    56  	if v == 0 {
    57  		return fmt.Errorf("invalid tx signature limit: %d", v)
    58  	}
    59  
    60  	return nil
    61  }
    62  
    63  func validateSigVerifyCostED25519(i interface{}) error {
    64  	v, ok := i.(uint64)
    65  	if !ok {
    66  		return fmt.Errorf("invalid parameter type: %T", i)
    67  	}
    68  
    69  	if v == 0 {
    70  		return fmt.Errorf("invalid ED25519 signature verification cost: %d", v)
    71  	}
    72  
    73  	return nil
    74  }
    75  
    76  func validateSigVerifyCostSecp256k1(i interface{}) error {
    77  	v, ok := i.(uint64)
    78  	if !ok {
    79  		return fmt.Errorf("invalid parameter type: %T", i)
    80  	}
    81  
    82  	if v == 0 {
    83  		return fmt.Errorf("invalid SECK256k1 signature verification cost: %d", v)
    84  	}
    85  
    86  	return nil
    87  }
    88  
    89  func validateMaxMemoCharacters(i interface{}) error {
    90  	v, ok := i.(uint64)
    91  	if !ok {
    92  		return fmt.Errorf("invalid parameter type: %T", i)
    93  	}
    94  
    95  	if v == 0 {
    96  		return fmt.Errorf("invalid max memo characters: %d", v)
    97  	}
    98  
    99  	return nil
   100  }
   101  
   102  func validateTxSizeCostPerByte(i interface{}) error {
   103  	v, ok := i.(uint64)
   104  	if !ok {
   105  		return fmt.Errorf("invalid parameter type: %T", i)
   106  	}
   107  
   108  	if v == 0 {
   109  		return fmt.Errorf("invalid tx size cost per byte: %d", v)
   110  	}
   111  
   112  	return nil
   113  }
   114  
   115  // Validate checks that the parameters have valid values.
   116  func (p Params) Validate() error {
   117  	if err := validateTxSigLimit(p.TxSigLimit); err != nil {
   118  		return err
   119  	}
   120  	if err := validateSigVerifyCostED25519(p.SigVerifyCostED25519); err != nil {
   121  		return err
   122  	}
   123  	if err := validateSigVerifyCostSecp256k1(p.SigVerifyCostSecp256k1); err != nil {
   124  		return err
   125  	}
   126  	if err := validateMaxMemoCharacters(p.MaxMemoCharacters); err != nil {
   127  		return err
   128  	}
   129  	if err := validateTxSizeCostPerByte(p.TxSizeCostPerByte); err != nil {
   130  		return err
   131  	}
   132  
   133  	return nil
   134  }