github.com/Finschia/finschia-sdk@v0.48.1/x/token/genesis.go (about) 1 package token 2 3 import ( 4 "math" 5 6 sdk "github.com/Finschia/finschia-sdk/types" 7 sdkerrors "github.com/Finschia/finschia-sdk/types/errors" 8 ) 9 10 // ValidateGenesis check the given genesis state has no integrity issues 11 func ValidateGenesis(data GenesisState) error { 12 if data.ClassState != nil { 13 if err := ValidateClassGenesis(*data.ClassState); err != nil { 14 return err 15 } 16 } 17 18 for _, contractBalances := range data.Balances { 19 if err := ValidateContractID(contractBalances.ContractId); err != nil { 20 return err 21 } 22 23 if len(contractBalances.Balances) == 0 { 24 return sdkerrors.ErrInvalidRequest.Wrap("balances cannot be empty") 25 } 26 for _, balance := range contractBalances.Balances { 27 if _, err := sdk.AccAddressFromBech32(balance.Address); err != nil { 28 return err 29 } 30 if err := validateAmount(balance.Amount); err != nil { 31 return err 32 } 33 } 34 } 35 36 for _, c := range data.Classes { 37 if err := ValidateContractID(c.Id); err != nil { 38 return err 39 } 40 if err := validateName(c.Name); err != nil { 41 return err 42 } 43 if err := validateSymbol(c.Symbol); err != nil { 44 return err 45 } 46 if err := validateURI(c.Uri); err != nil { 47 return err 48 } 49 if err := validateMeta(c.Meta); err != nil { 50 return err 51 } 52 if err := validateDecimals(c.Decimals); err != nil { 53 return err 54 } 55 } 56 57 for _, contractGrants := range data.Grants { 58 if err := ValidateContractID(contractGrants.ContractId); err != nil { 59 return err 60 } 61 62 if len(contractGrants.Grants) == 0 { 63 return sdkerrors.ErrInvalidRequest.Wrap("grants cannot be empty") 64 } 65 for _, grant := range contractGrants.Grants { 66 if _, err := sdk.AccAddressFromBech32(grant.Grantee); err != nil { 67 return err 68 } 69 if err := ValidatePermission(grant.Permission); err != nil { 70 return err 71 } 72 } 73 } 74 75 for _, contractAuthorizations := range data.Authorizations { 76 if err := ValidateContractID(contractAuthorizations.ContractId); err != nil { 77 return err 78 } 79 80 if len(contractAuthorizations.Authorizations) == 0 { 81 return sdkerrors.ErrInvalidRequest.Wrap("authorizations cannot be empty") 82 } 83 for _, authorization := range contractAuthorizations.Authorizations { 84 if _, err := sdk.AccAddressFromBech32(authorization.Holder); err != nil { 85 return err 86 } 87 if _, err := sdk.AccAddressFromBech32(authorization.Operator); err != nil { 88 return err 89 } 90 } 91 } 92 93 return nil 94 } 95 96 // DefaultGenesisState - Return a default genesis state 97 func DefaultGenesisState() *GenesisState { 98 return &GenesisState{ClassState: DefaultClassGenesisState()} 99 } 100 101 // For Class keeper 102 func ValidateClassGenesis(data ClassGenesisState) error { 103 if data.Nonce.GT(sdk.NewUint(math.MaxUint64)) { 104 return sdkerrors.ErrInvalidRequest.Wrapf("Invalid nonce: %s", data.Nonce) 105 } 106 107 return nil 108 } 109 110 func DefaultClassGenesisState() *ClassGenesisState { 111 return &ClassGenesisState{ 112 Nonce: sdk.ZeroUint(), 113 } 114 }