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 }