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  }