github.com/Finschia/finschia-sdk@v0.49.1/x/fbridge/types/genesis.go (about) 1 package types 2 3 import ( 4 "errors" 5 6 sdk "github.com/Finschia/finschia-sdk/types" 7 authtypes "github.com/Finschia/finschia-sdk/x/auth/types" 8 foundationtypes "github.com/Finschia/finschia-sdk/x/foundation" 9 govtypes "github.com/Finschia/finschia-sdk/x/gov/types" 10 ) 11 12 func DefaultGenesisState() *GenesisState { 13 return &GenesisState{ 14 Params: DefaultParams(), 15 SendingState: SendingState{ 16 NextSeq: 1, 17 }, 18 ReceivingState: ReceivingState{}, 19 NextRoleProposalId: 1, 20 } 21 } 22 23 func DefaultAuthority() sdk.AccAddress { 24 return authtypes.NewModuleAddress(govtypes.ModuleName) 25 } 26 27 func AuthorityCandiates() []sdk.AccAddress { 28 return []sdk.AccAddress{ 29 authtypes.NewModuleAddress(govtypes.ModuleName), 30 authtypes.NewModuleAddress(foundationtypes.ModuleName), 31 } 32 } 33 34 func ValidateGenesis(data GenesisState) error { 35 if err := data.Params.ValidateParams(); err != nil { 36 return err 37 } 38 39 if err := validateSendingState(data.SendingState); err != nil { 40 return err 41 } 42 43 if data.NextRoleProposalId < 1 { 44 return errors.New("next role proposal ID must be positive") 45 } 46 47 for _, v := range data.RoleProposals { 48 if v.Id < 1 { 49 return errors.New("role proposal ID must be positive") 50 } 51 sdk.MustAccAddressFromBech32(v.Proposer) 52 sdk.MustAccAddressFromBech32(v.Target) 53 if err := IsValidRole(v.Role); err != nil { 54 return err 55 } 56 } 57 58 for _, v := range data.Votes { 59 if v.ProposalId < 1 { 60 return errors.New("role proposal ID must be positive") 61 } 62 sdk.MustAccAddressFromBech32(v.Voter) 63 if err := IsValidVoteOption(v.Option); err != nil { 64 return err 65 } 66 } 67 68 for _, v := range data.Roles { 69 sdk.MustAccAddressFromBech32(v.Address) 70 if err := IsValidRole(v.Role); err != nil { 71 return err 72 } 73 } 74 75 for _, v := range data.BridgeSwitches { 76 sdk.MustAccAddressFromBech32(v.Guardian) 77 if err := IsValidBridgeStatus(v.Status); err != nil { 78 return err 79 } 80 } 81 82 return nil 83 } 84 85 func validateSendingState(state SendingState) error { 86 if state.NextSeq < 1 { 87 return errors.New("next sequence must be positive") 88 } 89 90 if state.NextSeq-1 != uint64(len(state.SeqToBlocknum)) { 91 return errors.New("sequence to blocknum mapping is invalid") 92 } 93 94 chkSeq := make(map[uint64]struct{}) 95 for _, v := range state.SeqToBlocknum { 96 if v.Blocknum == 0 || v.Seq == 0 { 97 return errors.New("blocknum and seq must be positive") 98 } 99 100 if _, ok := chkSeq[v.Seq]; ok { 101 return errors.New("duplicate sequence") 102 } 103 104 chkSeq[v.Seq] = struct{}{} 105 } 106 107 return nil 108 }