github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/evidence/client/cli/query.go (about) 1 package cli 2 3 import ( 4 "encoding/hex" 5 "fmt" 6 "strings" 7 8 "github.com/spf13/cobra" 9 "github.com/spf13/viper" 10 11 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client" 12 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context" 13 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/flags" 14 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec" 15 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/version" 16 "github.com/fibonacci-chain/fbc/x/evidence/exported" 17 "github.com/fibonacci-chain/fbc/x/evidence/internal/types" 18 ) 19 20 // GetQueryCmd returns the CLI command with all evidence module query commands 21 // mounted. 22 func GetQueryCmd(queryRoute string, cdc *codec.Codec) *cobra.Command { 23 cmd := &cobra.Command{ 24 Use: types.ModuleName, 25 Short: "Query for evidence by hash or for all (paginated) submitted evidence", 26 Long: strings.TrimSpace( 27 fmt.Sprintf(`Query for specific submitted evidence by hash or query for all (paginated) evidence: 28 29 Example: 30 $ %s query %s DF0C23E8634E480F84B9D5674A7CDC9816466DEC28A3358F73260F68D28D7660 31 $ %s query %s --page=2 --limit=50 32 `, 33 version.ClientName, types.ModuleName, version.ClientName, types.ModuleName, 34 ), 35 ), 36 Args: cobra.MaximumNArgs(1), 37 DisableFlagParsing: true, 38 SuggestionsMinimumDistance: 2, 39 RunE: QueryEvidenceCmd(cdc), 40 } 41 42 cmd.Flags().Int(flags.FlagPage, 1, "pagination page of evidence to to query for") 43 cmd.Flags().Int(flags.FlagLimit, 100, "pagination limit of evidence to query for") 44 45 cmd.AddCommand(flags.GetCommands(QueryParamsCmd(cdc))...) 46 47 return flags.GetCommands(cmd)[0] 48 } 49 50 // QueryParamsCmd returns the command handler for evidence parameter querying. 51 func QueryParamsCmd(cdc *codec.Codec) *cobra.Command { 52 return &cobra.Command{ 53 Use: "params", 54 Short: "Query the current evidence parameters", 55 Args: cobra.NoArgs, 56 Long: strings.TrimSpace(`Query the current evidence parameters: 57 58 $ <appcli> query evidence params 59 `), 60 RunE: func(cmd *cobra.Command, args []string) error { 61 cliCtx := context.NewCLIContext().WithCodec(cdc) 62 63 route := fmt.Sprintf("custom/%s/%s", types.QuerierRoute, types.QueryParameters) 64 res, _, err := cliCtx.QueryWithData(route, nil) 65 if err != nil { 66 return err 67 } 68 69 var params types.Params 70 if err := cdc.UnmarshalJSON(res, ¶ms); err != nil { 71 return fmt.Errorf("failed to unmarshal params: %w", err) 72 } 73 74 return cliCtx.PrintOutput(params) 75 }, 76 } 77 } 78 79 // QueryEvidenceCmd returns the command handler for evidence querying. Evidence 80 // can be queried for by hash or paginated evidence can be returned. 81 func QueryEvidenceCmd(cdc *codec.Codec) func(*cobra.Command, []string) error { 82 return func(cmd *cobra.Command, args []string) error { 83 if err := client.ValidateCmd(cmd, args); err != nil { 84 return err 85 } 86 87 cliCtx := context.NewCLIContext().WithCodec(cdc) 88 89 if hash := args[0]; hash != "" { 90 return queryEvidence(cdc, cliCtx, hash) 91 } 92 93 return queryAllEvidence(cdc, cliCtx) 94 } 95 } 96 97 func queryEvidence(cdc *codec.Codec, cliCtx context.CLIContext, hash string) error { 98 if _, err := hex.DecodeString(hash); err != nil { 99 return fmt.Errorf("invalid evidence hash: %w", err) 100 } 101 102 params := types.NewQueryEvidenceParams(hash) 103 bz, err := cdc.MarshalJSON(params) 104 if err != nil { 105 return fmt.Errorf("failed to marshal query params: %w", err) 106 } 107 108 route := fmt.Sprintf("custom/%s/%s", types.QuerierRoute, types.QueryEvidence) 109 res, _, err := cliCtx.QueryWithData(route, bz) 110 if err != nil { 111 return err 112 } 113 114 var evidence exported.Evidence 115 err = cdc.UnmarshalJSON(res, &evidence) 116 if err != nil { 117 return fmt.Errorf("failed to unmarshal evidence: %w", err) 118 } 119 120 return cliCtx.PrintOutput(evidence) 121 } 122 123 func queryAllEvidence(cdc *codec.Codec, cliCtx context.CLIContext) error { 124 params := types.NewQueryAllEvidenceParams(viper.GetInt(flags.FlagPage), viper.GetInt(flags.FlagLimit)) 125 bz, err := cdc.MarshalJSON(params) 126 if err != nil { 127 return fmt.Errorf("failed to marshal query params: %w", err) 128 } 129 130 route := fmt.Sprintf("custom/%s/%s", types.QuerierRoute, types.QueryAllEvidence) 131 res, _, err := cliCtx.QueryWithData(route, bz) 132 if err != nil { 133 return err 134 } 135 136 var evidence []exported.Evidence 137 err = cdc.UnmarshalJSON(res, &evidence) 138 if err != nil { 139 return fmt.Errorf("failed to unmarshal evidence: %w", err) 140 } 141 142 return cliCtx.PrintOutput(evidence) 143 }