github.com/Finschia/finschia-sdk@v0.49.1/x/fbridge/types/params.go (about)

     1  package types
     2  
     3  import (
     4  	"time"
     5  
     6  	sdktypes "github.com/Finschia/finschia-sdk/types"
     7  	sdkerrors "github.com/Finschia/finschia-sdk/types/errors"
     8  )
     9  
    10  func DefaultParams() Params {
    11  	return Params{
    12  		GuardianTrustLevel: Fraction{Numerator: 2, Denominator: 3},
    13  		OperatorTrustLevel: Fraction{Numerator: 2, Denominator: 3},
    14  		JudgeTrustLevel:    Fraction{Numerator: 1, Denominator: 1},
    15  		ProposalPeriod:     uint64(time.Minute * 60),
    16  		TimelockPeriod:     uint64(time.Hour * 24),
    17  		TargetDenom:        sdktypes.DefaultBondDenom,
    18  	}
    19  }
    20  
    21  func (p Params) ValidateParams() error {
    22  	if err := ValidateTrustLevel(p.GuardianTrustLevel); err != nil {
    23  		return sdkerrors.ErrInvalidRequest.Wrap("guardian trust level: " + err.Error())
    24  	}
    25  
    26  	if err := ValidateTrustLevel(p.OperatorTrustLevel); err != nil {
    27  		return sdkerrors.ErrInvalidRequest.Wrap("operator trust level: " + err.Error())
    28  	}
    29  
    30  	if err := ValidateTrustLevel(p.JudgeTrustLevel); err != nil {
    31  		return sdkerrors.ErrInvalidRequest.Wrap("judge trust level: " + err.Error())
    32  	}
    33  
    34  	if p.ProposalPeriod == 0 {
    35  		return sdkerrors.ErrInvalidRequest.Wrap("proposal period cannot be 0")
    36  	}
    37  
    38  	if p.TimelockPeriod == 0 {
    39  		return sdkerrors.ErrInvalidRequest.Wrap("timelock period cannot be 0")
    40  	}
    41  
    42  	if err := sdktypes.ValidateDenom(p.TargetDenom); err != nil {
    43  		return err
    44  	}
    45  
    46  	return nil
    47  }
    48  
    49  func CheckTrustLevelThreshold(total, current uint64, trustLevel Fraction) bool {
    50  	if err := ValidateTrustLevel(trustLevel); err != nil {
    51  		panic(err)
    52  	}
    53  
    54  	if total*trustLevel.Numerator <= current*trustLevel.Denominator &&
    55  		total > 0 &&
    56  		current <= total {
    57  		return true
    58  	}
    59  
    60  	return false
    61  }
    62  
    63  func ValidateTrustLevel(trustLevel Fraction) error {
    64  	if trustLevel.Denominator < 1 || trustLevel.Numerator < 1 {
    65  		return sdkerrors.ErrInvalidRequest.Wrap("trust level must be positive")
    66  	} else if trustLevel.Denominator < trustLevel.Numerator {
    67  		return sdkerrors.ErrInvalidRequest.Wrap("trust level denominator must be greater than or equal to the numerator")
    68  	}
    69  
    70  	return nil
    71  }