github.com/Finschia/finschia-sdk@v0.48.1/x/staking/client/cli/query.go (about) 1 package cli 2 3 import ( 4 "fmt" 5 "strconv" 6 "strings" 7 8 "github.com/spf13/cobra" 9 10 "github.com/Finschia/finschia-sdk/client" 11 "github.com/Finschia/finschia-sdk/client/flags" 12 sdk "github.com/Finschia/finschia-sdk/types" 13 "github.com/Finschia/finschia-sdk/version" 14 "github.com/Finschia/finschia-sdk/x/staking/types" 15 ) 16 17 // GetQueryCmd returns the cli query commands for this module 18 func GetQueryCmd() *cobra.Command { 19 stakingQueryCmd := &cobra.Command{ 20 Use: types.ModuleName, 21 Short: "Querying commands for the staking module", 22 DisableFlagParsing: true, 23 SuggestionsMinimumDistance: 2, 24 RunE: client.ValidateCmd, 25 } 26 27 stakingQueryCmd.AddCommand( 28 GetCmdQueryDelegation(), 29 GetCmdQueryDelegations(), 30 GetCmdQueryUnbondingDelegation(), 31 GetCmdQueryUnbondingDelegations(), 32 GetCmdQueryRedelegation(), 33 GetCmdQueryRedelegations(), 34 GetCmdQueryValidator(), 35 GetCmdQueryValidators(), 36 GetCmdQueryValidatorDelegations(), 37 GetCmdQueryValidatorUnbondingDelegations(), 38 GetCmdQueryValidatorRedelegations(), 39 GetCmdQueryHistoricalInfo(), 40 GetCmdQueryParams(), 41 GetCmdQueryPool(), 42 ) 43 44 return stakingQueryCmd 45 } 46 47 // GetCmdQueryValidator implements the validator query command. 48 func GetCmdQueryValidator() *cobra.Command { 49 bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix() 50 51 cmd := &cobra.Command{ 52 Use: "validator [validator-addr]", 53 Short: "Query a validator", 54 Long: strings.TrimSpace( 55 fmt.Sprintf(`Query details about an individual validator. 56 57 Example: 58 $ %s query staking validator %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 59 `, 60 version.AppName, bech32PrefixValAddr, 61 ), 62 ), 63 Args: cobra.ExactArgs(1), 64 RunE: func(cmd *cobra.Command, args []string) error { 65 clientCtx, err := client.GetClientQueryContext(cmd) 66 if err != nil { 67 return err 68 } 69 queryClient := types.NewQueryClient(clientCtx) 70 71 addr, err := sdk.ValAddressFromBech32(args[0]) 72 if err != nil { 73 return err 74 } 75 76 params := &types.QueryValidatorRequest{ValidatorAddr: addr.String()} 77 res, err := queryClient.Validator(cmd.Context(), params) 78 if err != nil { 79 return err 80 } 81 82 return clientCtx.PrintProto(&res.Validator) 83 }, 84 } 85 86 flags.AddQueryFlagsToCmd(cmd) 87 88 return cmd 89 } 90 91 // GetCmdQueryValidators implements the query all validators command. 92 func GetCmdQueryValidators() *cobra.Command { 93 cmd := &cobra.Command{ 94 Use: "validators", 95 Short: "Query for all validators", 96 Args: cobra.NoArgs, 97 Long: strings.TrimSpace( 98 fmt.Sprintf(`Query details about all validators on a network. 99 100 Example: 101 $ %s query staking validators 102 `, 103 version.AppName, 104 ), 105 ), 106 RunE: func(cmd *cobra.Command, args []string) error { 107 clientCtx, err := client.GetClientQueryContext(cmd) 108 if err != nil { 109 return err 110 } 111 queryClient := types.NewQueryClient(clientCtx) 112 pageReq, err := client.ReadPageRequest(cmd.Flags()) 113 if err != nil { 114 return err 115 } 116 117 result, err := queryClient.Validators(cmd.Context(), &types.QueryValidatorsRequest{ 118 // Leaving status empty on purpose to query all validators. 119 Pagination: pageReq, 120 }) 121 if err != nil { 122 return err 123 } 124 125 return clientCtx.PrintProto(result) 126 }, 127 } 128 129 flags.AddQueryFlagsToCmd(cmd) 130 flags.AddPaginationFlagsToCmd(cmd, "validators") 131 132 return cmd 133 } 134 135 // GetCmdQueryValidatorUnbondingDelegations implements the query all unbonding delegatations from a validator command. 136 func GetCmdQueryValidatorUnbondingDelegations() *cobra.Command { 137 bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix() 138 139 cmd := &cobra.Command{ 140 Use: "unbonding-delegations-from [validator-addr]", 141 Short: "Query all unbonding delegatations from a validator", 142 Long: strings.TrimSpace( 143 fmt.Sprintf(`Query delegations that are unbonding _from_ a validator. 144 145 Example: 146 $ %s query staking unbonding-delegations-from %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 147 `, 148 version.AppName, bech32PrefixValAddr, 149 ), 150 ), 151 Args: cobra.ExactArgs(1), 152 RunE: func(cmd *cobra.Command, args []string) error { 153 clientCtx, err := client.GetClientQueryContext(cmd) 154 if err != nil { 155 return err 156 } 157 queryClient := types.NewQueryClient(clientCtx) 158 159 valAddr, err := sdk.ValAddressFromBech32(args[0]) 160 if err != nil { 161 return err 162 } 163 164 pageReq, err := client.ReadPageRequest(cmd.Flags()) 165 if err != nil { 166 return err 167 } 168 169 params := &types.QueryValidatorUnbondingDelegationsRequest{ 170 ValidatorAddr: valAddr.String(), 171 Pagination: pageReq, 172 } 173 174 res, err := queryClient.ValidatorUnbondingDelegations(cmd.Context(), params) 175 if err != nil { 176 return err 177 } 178 179 return clientCtx.PrintProto(res) 180 }, 181 } 182 183 flags.AddQueryFlagsToCmd(cmd) 184 flags.AddPaginationFlagsToCmd(cmd, "unbonding delegations") 185 186 return cmd 187 } 188 189 // GetCmdQueryValidatorRedelegations implements the query all redelegatations 190 // from a validator command. 191 func GetCmdQueryValidatorRedelegations() *cobra.Command { 192 bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix() 193 194 cmd := &cobra.Command{ 195 Use: "redelegations-from [validator-addr]", 196 Short: "Query all outgoing redelegatations from a validator", 197 Long: strings.TrimSpace( 198 fmt.Sprintf(`Query delegations that are redelegating _from_ a validator. 199 200 Example: 201 $ %s query staking redelegations-from %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 202 `, 203 version.AppName, bech32PrefixValAddr, 204 ), 205 ), 206 Args: cobra.ExactArgs(1), 207 RunE: func(cmd *cobra.Command, args []string) error { 208 clientCtx, err := client.GetClientQueryContext(cmd) 209 if err != nil { 210 return err 211 } 212 queryClient := types.NewQueryClient(clientCtx) 213 214 valSrcAddr, err := sdk.ValAddressFromBech32(args[0]) 215 if err != nil { 216 return err 217 } 218 219 pageReq, err := client.ReadPageRequest(cmd.Flags()) 220 if err != nil { 221 return err 222 } 223 224 params := &types.QueryRedelegationsRequest{ 225 SrcValidatorAddr: valSrcAddr.String(), 226 Pagination: pageReq, 227 } 228 229 res, err := queryClient.Redelegations(cmd.Context(), params) 230 if err != nil { 231 return err 232 } 233 234 return clientCtx.PrintProto(res) 235 }, 236 } 237 238 flags.AddQueryFlagsToCmd(cmd) 239 flags.AddPaginationFlagsToCmd(cmd, "validator redelegations") 240 241 return cmd 242 } 243 244 // GetCmdQueryDelegation the query delegation command. 245 func GetCmdQueryDelegation() *cobra.Command { 246 bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix() 247 bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix() 248 249 cmd := &cobra.Command{ 250 Use: "delegation [delegator-addr] [validator-addr]", 251 Short: "Query a delegation based on address and validator address", 252 Long: strings.TrimSpace( 253 fmt.Sprintf(`Query delegations for an individual delegator on an individual validator. 254 255 Example: 256 $ %s query staking delegation %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 257 `, 258 version.AppName, bech32PrefixAccAddr, bech32PrefixValAddr, 259 ), 260 ), 261 Args: cobra.ExactArgs(2), 262 RunE: func(cmd *cobra.Command, args []string) error { 263 clientCtx, err := client.GetClientQueryContext(cmd) 264 if err != nil { 265 return err 266 } 267 queryClient := types.NewQueryClient(clientCtx) 268 269 delAddr, err := sdk.AccAddressFromBech32(args[0]) 270 if err != nil { 271 return err 272 } 273 274 valAddr, err := sdk.ValAddressFromBech32(args[1]) 275 if err != nil { 276 return err 277 } 278 279 params := &types.QueryDelegationRequest{ 280 DelegatorAddr: delAddr.String(), 281 ValidatorAddr: valAddr.String(), 282 } 283 284 res, err := queryClient.Delegation(cmd.Context(), params) 285 if err != nil { 286 return err 287 } 288 289 return clientCtx.PrintProto(res.DelegationResponse) 290 }, 291 } 292 293 flags.AddQueryFlagsToCmd(cmd) 294 295 return cmd 296 } 297 298 // GetCmdQueryDelegations implements the command to query all the delegations 299 // made from one delegator. 300 func GetCmdQueryDelegations() *cobra.Command { 301 bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix() 302 303 cmd := &cobra.Command{ 304 Use: "delegations [delegator-addr]", 305 Short: "Query all delegations made by one delegator", 306 Long: strings.TrimSpace( 307 fmt.Sprintf(`Query delegations for an individual delegator on all validators. 308 309 Example: 310 $ %s query staking delegations %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p 311 `, 312 version.AppName, bech32PrefixAccAddr, 313 ), 314 ), 315 Args: cobra.ExactArgs(1), 316 RunE: func(cmd *cobra.Command, args []string) error { 317 clientCtx, err := client.GetClientQueryContext(cmd) 318 if err != nil { 319 return err 320 } 321 queryClient := types.NewQueryClient(clientCtx) 322 323 delAddr, err := sdk.AccAddressFromBech32(args[0]) 324 if err != nil { 325 return err 326 } 327 328 pageReq, err := client.ReadPageRequest(cmd.Flags()) 329 if err != nil { 330 return err 331 } 332 333 params := &types.QueryDelegatorDelegationsRequest{ 334 DelegatorAddr: delAddr.String(), 335 Pagination: pageReq, 336 } 337 338 res, err := queryClient.DelegatorDelegations(cmd.Context(), params) 339 if err != nil { 340 return err 341 } 342 343 return clientCtx.PrintProto(res) 344 }, 345 } 346 347 flags.AddQueryFlagsToCmd(cmd) 348 flags.AddPaginationFlagsToCmd(cmd, "delegations") 349 350 return cmd 351 } 352 353 // GetCmdQueryValidatorDelegations implements the command to query all the 354 // delegations to a specific validator. 355 func GetCmdQueryValidatorDelegations() *cobra.Command { 356 bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix() 357 358 cmd := &cobra.Command{ 359 Use: "delegations-to [validator-addr]", 360 Short: "Query all delegations made to one validator", 361 Long: strings.TrimSpace( 362 fmt.Sprintf(`Query delegations on an individual validator. 363 364 Example: 365 $ %s query staking delegations-to %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 366 `, 367 version.AppName, bech32PrefixValAddr, 368 ), 369 ), 370 Args: cobra.ExactArgs(1), 371 RunE: func(cmd *cobra.Command, args []string) error { 372 clientCtx, err := client.GetClientQueryContext(cmd) 373 if err != nil { 374 return err 375 } 376 queryClient := types.NewQueryClient(clientCtx) 377 378 valAddr, err := sdk.ValAddressFromBech32(args[0]) 379 if err != nil { 380 return err 381 } 382 383 pageReq, err := client.ReadPageRequest(cmd.Flags()) 384 if err != nil { 385 return err 386 } 387 388 params := &types.QueryValidatorDelegationsRequest{ 389 ValidatorAddr: valAddr.String(), 390 Pagination: pageReq, 391 } 392 393 res, err := queryClient.ValidatorDelegations(cmd.Context(), params) 394 if err != nil { 395 return err 396 } 397 398 return clientCtx.PrintProto(res) 399 }, 400 } 401 402 flags.AddQueryFlagsToCmd(cmd) 403 flags.AddPaginationFlagsToCmd(cmd, "validator delegations") 404 405 return cmd 406 } 407 408 // GetCmdQueryUnbondingDelegation implements the command to query a single 409 // unbonding-delegation record. 410 func GetCmdQueryUnbondingDelegation() *cobra.Command { 411 bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix() 412 bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix() 413 414 cmd := &cobra.Command{ 415 Use: "unbonding-delegation [delegator-addr] [validator-addr]", 416 Short: "Query an unbonding-delegation record based on delegator and validator address", 417 Long: strings.TrimSpace( 418 fmt.Sprintf(`Query unbonding delegations for an individual delegator on an individual validator. 419 420 Example: 421 $ %s query staking unbonding-delegation %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 422 `, 423 version.AppName, bech32PrefixAccAddr, bech32PrefixValAddr, 424 ), 425 ), 426 Args: cobra.ExactArgs(2), 427 RunE: func(cmd *cobra.Command, args []string) error { 428 clientCtx, err := client.GetClientQueryContext(cmd) 429 if err != nil { 430 return err 431 } 432 queryClient := types.NewQueryClient(clientCtx) 433 434 valAddr, err := sdk.ValAddressFromBech32(args[1]) 435 if err != nil { 436 return err 437 } 438 439 delAddr, err := sdk.AccAddressFromBech32(args[0]) 440 if err != nil { 441 return err 442 } 443 444 params := &types.QueryUnbondingDelegationRequest{ 445 DelegatorAddr: delAddr.String(), 446 ValidatorAddr: valAddr.String(), 447 } 448 449 res, err := queryClient.UnbondingDelegation(cmd.Context(), params) 450 if err != nil { 451 return err 452 } 453 454 return clientCtx.PrintProto(&res.Unbond) 455 }, 456 } 457 458 flags.AddQueryFlagsToCmd(cmd) 459 460 return cmd 461 } 462 463 // GetCmdQueryUnbondingDelegations implements the command to query all the 464 // unbonding-delegation records for a delegator. 465 func GetCmdQueryUnbondingDelegations() *cobra.Command { 466 bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix() 467 468 cmd := &cobra.Command{ 469 Use: "unbonding-delegations [delegator-addr]", 470 Short: "Query all unbonding-delegations records for one delegator", 471 Long: strings.TrimSpace( 472 fmt.Sprintf(`Query unbonding delegations for an individual delegator. 473 474 Example: 475 $ %s query staking unbonding-delegations %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p 476 `, 477 version.AppName, bech32PrefixAccAddr, 478 ), 479 ), 480 Args: cobra.ExactArgs(1), 481 RunE: func(cmd *cobra.Command, args []string) error { 482 clientCtx, err := client.GetClientQueryContext(cmd) 483 if err != nil { 484 return err 485 } 486 queryClient := types.NewQueryClient(clientCtx) 487 488 delegatorAddr, err := sdk.AccAddressFromBech32(args[0]) 489 if err != nil { 490 return err 491 } 492 493 pageReq, err := client.ReadPageRequest(cmd.Flags()) 494 if err != nil { 495 return err 496 } 497 498 params := &types.QueryDelegatorUnbondingDelegationsRequest{ 499 DelegatorAddr: delegatorAddr.String(), 500 Pagination: pageReq, 501 } 502 503 res, err := queryClient.DelegatorUnbondingDelegations(cmd.Context(), params) 504 if err != nil { 505 return err 506 } 507 508 return clientCtx.PrintProto(res) 509 }, 510 } 511 512 flags.AddQueryFlagsToCmd(cmd) 513 flags.AddPaginationFlagsToCmd(cmd, "unbonding delegations") 514 515 return cmd 516 } 517 518 // GetCmdQueryRedelegation implements the command to query a single 519 // redelegation record. 520 func GetCmdQueryRedelegation() *cobra.Command { 521 bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix() 522 bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix() 523 524 cmd := &cobra.Command{ 525 Use: "redelegation [delegator-addr] [src-validator-addr] [dst-validator-addr]", 526 Short: "Query a redelegation record based on delegator and a source and destination validator address", 527 Long: strings.TrimSpace( 528 fmt.Sprintf(`Query a redelegation record for an individual delegator between a source and destination validator. 529 530 Example: 531 $ %s query staking redelegation %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p %s1l2rsakp388kuv9k8qzq6lrm9taddae7fpx59wm %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 532 `, 533 version.AppName, bech32PrefixAccAddr, bech32PrefixValAddr, bech32PrefixValAddr, 534 ), 535 ), 536 Args: cobra.ExactArgs(3), 537 RunE: func(cmd *cobra.Command, args []string) error { 538 clientCtx, err := client.GetClientQueryContext(cmd) 539 if err != nil { 540 return err 541 } 542 queryClient := types.NewQueryClient(clientCtx) 543 544 delAddr, err := sdk.AccAddressFromBech32(args[0]) 545 if err != nil { 546 return err 547 } 548 549 valSrcAddr, err := sdk.ValAddressFromBech32(args[1]) 550 if err != nil { 551 return err 552 } 553 554 valDstAddr, err := sdk.ValAddressFromBech32(args[2]) 555 if err != nil { 556 return err 557 } 558 559 params := &types.QueryRedelegationsRequest{ 560 DelegatorAddr: delAddr.String(), 561 DstValidatorAddr: valDstAddr.String(), 562 SrcValidatorAddr: valSrcAddr.String(), 563 } 564 565 res, err := queryClient.Redelegations(cmd.Context(), params) 566 if err != nil { 567 return err 568 } 569 570 return clientCtx.PrintProto(res) 571 }, 572 } 573 574 flags.AddQueryFlagsToCmd(cmd) 575 576 return cmd 577 } 578 579 // GetCmdQueryRedelegations implements the command to query all the 580 // redelegation records for a delegator. 581 func GetCmdQueryRedelegations() *cobra.Command { 582 bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix() 583 584 cmd := &cobra.Command{ 585 Use: "redelegations [delegator-addr]", 586 Args: cobra.ExactArgs(1), 587 Short: "Query all redelegations records for one delegator", 588 Long: strings.TrimSpace( 589 fmt.Sprintf(`Query all redelegation records for an individual delegator. 590 591 Example: 592 $ %s query staking redelegation %s1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p 593 `, 594 version.AppName, bech32PrefixAccAddr, 595 ), 596 ), 597 RunE: func(cmd *cobra.Command, args []string) error { 598 clientCtx, err := client.GetClientQueryContext(cmd) 599 if err != nil { 600 return err 601 } 602 queryClient := types.NewQueryClient(clientCtx) 603 604 delAddr, err := sdk.AccAddressFromBech32(args[0]) 605 if err != nil { 606 return err 607 } 608 609 pageReq, err := client.ReadPageRequest(cmd.Flags()) 610 if err != nil { 611 return err 612 } 613 614 params := &types.QueryRedelegationsRequest{ 615 DelegatorAddr: delAddr.String(), 616 Pagination: pageReq, 617 } 618 619 res, err := queryClient.Redelegations(cmd.Context(), params) 620 if err != nil { 621 return err 622 } 623 624 return clientCtx.PrintProto(res) 625 }, 626 } 627 628 flags.AddQueryFlagsToCmd(cmd) 629 flags.AddPaginationFlagsToCmd(cmd, "delegator redelegations") 630 631 return cmd 632 } 633 634 // GetCmdQueryHistoricalInfo implements the historical info query command 635 func GetCmdQueryHistoricalInfo() *cobra.Command { 636 cmd := &cobra.Command{ 637 Use: "historical-info [height]", 638 Args: cobra.ExactArgs(1), 639 Short: "Query historical info at given height", 640 Long: strings.TrimSpace( 641 fmt.Sprintf(`Query historical info at given height. 642 643 Example: 644 $ %s query staking historical-info 5 645 `, 646 version.AppName, 647 ), 648 ), 649 RunE: func(cmd *cobra.Command, args []string) error { 650 clientCtx, err := client.GetClientQueryContext(cmd) 651 if err != nil { 652 return err 653 } 654 queryClient := types.NewQueryClient(clientCtx) 655 656 height, err := strconv.ParseInt(args[0], 10, 64) 657 if err != nil || height < 0 { 658 return fmt.Errorf("height argument provided must be a non-negative-integer: %v", err) 659 } 660 661 params := &types.QueryHistoricalInfoRequest{Height: height} 662 res, err := queryClient.HistoricalInfo(cmd.Context(), params) 663 if err != nil { 664 return err 665 } 666 667 return clientCtx.PrintProto(res.Hist) 668 }, 669 } 670 671 flags.AddQueryFlagsToCmd(cmd) 672 673 return cmd 674 } 675 676 // GetCmdQueryPool implements the pool query command. 677 func GetCmdQueryPool() *cobra.Command { 678 cmd := &cobra.Command{ 679 Use: "pool", 680 Args: cobra.NoArgs, 681 Short: "Query the current staking pool values", 682 Long: strings.TrimSpace( 683 fmt.Sprintf(`Query values for amounts stored in the staking pool. 684 685 Example: 686 $ %s query staking pool 687 `, 688 version.AppName, 689 ), 690 ), 691 RunE: func(cmd *cobra.Command, args []string) error { 692 clientCtx, err := client.GetClientQueryContext(cmd) 693 if err != nil { 694 return err 695 } 696 queryClient := types.NewQueryClient(clientCtx) 697 698 res, err := queryClient.Pool(cmd.Context(), &types.QueryPoolRequest{}) 699 if err != nil { 700 return err 701 } 702 703 return clientCtx.PrintProto(&res.Pool) 704 }, 705 } 706 707 flags.AddQueryFlagsToCmd(cmd) 708 709 return cmd 710 } 711 712 // GetCmdQueryParams implements the params query command. 713 func GetCmdQueryParams() *cobra.Command { 714 cmd := &cobra.Command{ 715 Use: "params", 716 Args: cobra.NoArgs, 717 Short: "Query the current staking parameters information", 718 Long: strings.TrimSpace( 719 fmt.Sprintf(`Query values set as staking parameters. 720 721 Example: 722 $ %s query staking params 723 `, 724 version.AppName, 725 ), 726 ), 727 RunE: func(cmd *cobra.Command, args []string) error { 728 clientCtx, err := client.GetClientQueryContext(cmd) 729 if err != nil { 730 return err 731 } 732 queryClient := types.NewQueryClient(clientCtx) 733 734 res, err := queryClient.Params(cmd.Context(), &types.QueryParamsRequest{}) 735 if err != nil { 736 return err 737 } 738 739 return clientCtx.PrintProto(&res.Params) 740 }, 741 } 742 743 flags.AddQueryFlagsToCmd(cmd) 744 745 return cmd 746 }