github.com/Finschia/finschia-sdk@v0.48.1/x/genutil/client/cli/validate_genesis.go (about) 1 package cli 2 3 import ( 4 "encoding/json" 5 "fmt" 6 7 octypes "github.com/Finschia/ostracon/types" 8 "github.com/spf13/cobra" 9 10 "github.com/Finschia/finschia-sdk/client" 11 "github.com/Finschia/finschia-sdk/server" 12 "github.com/Finschia/finschia-sdk/types/module" 13 ) 14 15 const chainUpgradeGuide = "https://docs.cosmos.network/master/migrations/chain-upgrade-guide-040.html" 16 17 // ValidateGenesisCmd takes a genesis file, and makes sure that it is valid. 18 func ValidateGenesisCmd(mbm module.BasicManager) *cobra.Command { 19 return &cobra.Command{ 20 Use: "validate-genesis [file]", 21 Args: cobra.RangeArgs(0, 1), 22 Short: "validates the genesis file at the default location or at the location passed as an arg", 23 RunE: func(cmd *cobra.Command, args []string) (err error) { 24 serverCtx := server.GetServerContextFromCmd(cmd) 25 clientCtx := client.GetClientContextFromCmd(cmd) 26 27 cdc := clientCtx.Codec 28 29 // Load default if passed no args, otherwise load passed file 30 var genesis string 31 if len(args) == 0 { 32 genesis = serverCtx.Config.GenesisFile() 33 } else { 34 genesis = args[0] 35 } 36 37 genDoc, err := validateGenDoc(genesis) 38 if err != nil { 39 return err 40 } 41 42 var genState map[string]json.RawMessage 43 if err = json.Unmarshal(genDoc.AppState, &genState); err != nil { 44 return fmt.Errorf("error unmarshalling genesis doc %s: %s", genesis, err.Error()) 45 } 46 47 if err = mbm.ValidateGenesis(cdc, clientCtx.TxConfig, genState); err != nil { 48 return fmt.Errorf("error validating genesis file %s: %s", genesis, err.Error()) 49 } 50 51 fmt.Printf("File at %s is a valid genesis file\n", genesis) 52 return nil 53 }, 54 } 55 } 56 57 // validateGenDoc reads a genesis file and validates that it is a correct 58 // Tendermint GenesisDoc. This function does not do any cosmos-related 59 // validation. 60 func validateGenDoc(importGenesisFile string) (*octypes.GenesisDoc, error) { 61 genDoc, err := octypes.GenesisDocFromFile(importGenesisFile) 62 if err != nil { 63 return nil, fmt.Errorf("%s. Make sure that"+ 64 " you have correctly migrated all Tendermint consensus params, please see the"+ 65 " chain migration guide at %s for more info", 66 err.Error(), chainUpgradeGuide, 67 ) 68 } 69 70 return genDoc, nil 71 }