github.com/Finschia/finschia-sdk@v0.48.1/x/bank/client/cli/query.go (about) 1 package cli 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/spf13/cobra" 8 9 "github.com/Finschia/finschia-sdk/client" 10 "github.com/Finschia/finschia-sdk/client/flags" 11 sdk "github.com/Finschia/finschia-sdk/types" 12 "github.com/Finschia/finschia-sdk/version" 13 "github.com/Finschia/finschia-sdk/x/bank/types" 14 ) 15 16 const ( 17 FlagDenom = "denom" 18 ) 19 20 // GetQueryCmd returns the parent command for all x/bank CLi query commands. The 21 // provided clientCtx should have, at a minimum, a verifier, Tendermint RPC client, 22 // and marshaler set. 23 func GetQueryCmd() *cobra.Command { 24 cmd := &cobra.Command{ 25 Use: types.ModuleName, 26 Short: "Querying commands for the bank module", 27 DisableFlagParsing: true, 28 SuggestionsMinimumDistance: 2, 29 RunE: client.ValidateCmd, 30 } 31 32 cmd.AddCommand( 33 GetBalancesCmd(), 34 GetCmdQueryTotalSupply(), 35 GetCmdDenomsMetadata(), 36 ) 37 38 return cmd 39 } 40 41 func GetBalancesCmd() *cobra.Command { 42 cmd := &cobra.Command{ 43 Use: "balances [address]", 44 Short: "Query for account balances by address", 45 Long: strings.TrimSpace( 46 fmt.Sprintf(`Query the total balance of an account or of a specific denomination. 47 48 Example: 49 $ %s query %s balances [address] 50 $ %s query %s balances [address] --denom=[denom] 51 `, 52 version.AppName, types.ModuleName, version.AppName, types.ModuleName, 53 ), 54 ), 55 Args: cobra.ExactArgs(1), 56 RunE: func(cmd *cobra.Command, args []string) error { 57 clientCtx, err := client.GetClientQueryContext(cmd) 58 if err != nil { 59 return err 60 } 61 denom, err := cmd.Flags().GetString(FlagDenom) 62 if err != nil { 63 return err 64 } 65 66 queryClient := types.NewQueryClient(clientCtx) 67 68 addr, err := sdk.AccAddressFromBech32(args[0]) 69 if err != nil { 70 return err 71 } 72 73 pageReq, err := client.ReadPageRequest(cmd.Flags()) 74 if err != nil { 75 return err 76 } 77 ctx := cmd.Context() 78 if denom == "" { 79 params := types.NewQueryAllBalancesRequest(addr, pageReq) 80 res, err := queryClient.AllBalances(ctx, params) 81 if err != nil { 82 return err 83 } 84 return clientCtx.PrintProto(res) 85 } 86 87 params := types.NewQueryBalanceRequest(addr, denom) 88 res, err := queryClient.Balance(ctx, params) 89 if err != nil { 90 return err 91 } 92 93 return clientCtx.PrintProto(res.Balance) 94 }, 95 } 96 97 cmd.Flags().String(FlagDenom, "", "The specific balance denomination to query for") 98 flags.AddQueryFlagsToCmd(cmd) 99 flags.AddPaginationFlagsToCmd(cmd, "all balances") 100 101 return cmd 102 } 103 104 // GetCmdDenomsMetadata defines the cobra command to query client denomination metadata. 105 func GetCmdDenomsMetadata() *cobra.Command { 106 cmd := &cobra.Command{ 107 Use: "denom-metadata", 108 Args: cobra.NoArgs, 109 Short: "Query the client metadata for coin denominations", 110 Long: strings.TrimSpace( 111 fmt.Sprintf(`Query the client metadata for all the registered coin denominations 112 113 Example: 114 To query for the client metadata of all coin denominations use: 115 $ %s query %s denom-metadata 116 117 To query for the client metadata of a specific coin denomination use: 118 $ %s query %s denom-metadata --denom=[denom] 119 `, 120 version.AppName, types.ModuleName, version.AppName, types.ModuleName, 121 ), 122 ), 123 RunE: func(cmd *cobra.Command, _ []string) error { 124 clientCtx, err := client.GetClientQueryContext(cmd) 125 if err != nil { 126 return err 127 } 128 denom, err := cmd.Flags().GetString(FlagDenom) 129 if err != nil { 130 return err 131 } 132 133 queryClient := types.NewQueryClient(clientCtx) 134 135 if denom == "" { 136 res, err := queryClient.DenomsMetadata(cmd.Context(), &types.QueryDenomsMetadataRequest{}) 137 if err != nil { 138 return err 139 } 140 141 return clientCtx.PrintProto(res) 142 } 143 144 res, err := queryClient.DenomMetadata(cmd.Context(), &types.QueryDenomMetadataRequest{Denom: denom}) 145 if err != nil { 146 return err 147 } 148 149 return clientCtx.PrintProto(res) 150 }, 151 } 152 153 cmd.Flags().String(FlagDenom, "", "The specific denomination to query client metadata for") 154 flags.AddQueryFlagsToCmd(cmd) 155 156 return cmd 157 } 158 159 func GetCmdQueryTotalSupply() *cobra.Command { 160 cmd := &cobra.Command{ 161 Use: "total", 162 Args: cobra.NoArgs, 163 Short: "Query the total supply of coins of the chain", 164 Long: strings.TrimSpace( 165 fmt.Sprintf(`Query total supply of coins that are held by accounts in the chain. 166 167 Example: 168 $ %s query %s total 169 170 To query for the total supply of a specific coin denomination use: 171 $ %s query %s total --denom=[denom] 172 `, 173 version.AppName, types.ModuleName, version.AppName, types.ModuleName, 174 ), 175 ), 176 RunE: func(cmd *cobra.Command, args []string) error { 177 clientCtx, err := client.GetClientQueryContext(cmd) 178 if err != nil { 179 return err 180 } 181 denom, err := cmd.Flags().GetString(FlagDenom) 182 if err != nil { 183 return err 184 } 185 186 queryClient := types.NewQueryClient(clientCtx) 187 ctx := cmd.Context() 188 189 pageReq, err := client.ReadPageRequest(cmd.Flags()) 190 if err != nil { 191 return err 192 } 193 if denom == "" { 194 res, err := queryClient.TotalSupply(ctx, &types.QueryTotalSupplyRequest{Pagination: pageReq}) 195 if err != nil { 196 return err 197 } 198 199 return clientCtx.PrintProto(res) 200 } 201 202 res, err := queryClient.SupplyOf(ctx, &types.QuerySupplyOfRequest{Denom: denom}) 203 if err != nil { 204 return err 205 } 206 207 return clientCtx.PrintProto(&res.Amount) 208 }, 209 } 210 211 cmd.Flags().String(FlagDenom, "", "The specific balance denomination to query for") 212 flags.AddQueryFlagsToCmd(cmd) 213 flags.AddPaginationFlagsToCmd(cmd, "all supply totals") 214 215 return cmd 216 }