github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/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/fibonacci-chain/fbc/libs/cosmos-sdk/client" 11 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context" 12 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/flags" 13 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec" 14 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 15 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/version" 16 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/staking/types" 17 ) 18 19 // GetQueryCmd returns the cli query commands for this module 20 func GetQueryCmd(queryRoute string, cdc *codec.Codec) *cobra.Command { 21 stakingQueryCmd := &cobra.Command{ 22 Use: types.ModuleName, 23 Short: "Querying commands for the staking module", 24 DisableFlagParsing: true, 25 SuggestionsMinimumDistance: 2, 26 RunE: client.ValidateCmd, 27 } 28 stakingQueryCmd.AddCommand(flags.GetCommands( 29 GetCmdQueryDelegation(queryRoute, cdc), 30 GetCmdQueryDelegations(queryRoute, cdc), 31 GetCmdQueryUnbondingDelegation(queryRoute, cdc), 32 GetCmdQueryUnbondingDelegations(queryRoute, cdc), 33 GetCmdQueryRedelegation(queryRoute, cdc), 34 GetCmdQueryRedelegations(queryRoute, cdc), 35 GetCmdQueryValidator(queryRoute, cdc), 36 GetCmdQueryValidators(queryRoute, cdc), 37 GetCmdQueryValidatorDelegations(queryRoute, cdc), 38 GetCmdQueryValidatorUnbondingDelegations(queryRoute, cdc), 39 GetCmdQueryValidatorRedelegations(queryRoute, cdc), 40 GetCmdQueryHistoricalInfo(queryRoute, cdc), 41 GetCmdQueryParams(queryRoute, cdc), 42 GetCmdQueryPool(queryRoute, cdc))...) 43 44 return stakingQueryCmd 45 46 } 47 48 // GetCmdQueryValidator implements the validator query command. 49 func GetCmdQueryValidator(storeName string, cdc *codec.Codec) *cobra.Command { 50 return &cobra.Command{ 51 Use: "validator [validator-addr]", 52 Short: "Query a validator", 53 Long: strings.TrimSpace( 54 fmt.Sprintf(`Query details about an individual validator. 55 56 Example: 57 $ %s query staking validator cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 58 `, 59 version.ClientName, 60 ), 61 ), 62 Args: cobra.ExactArgs(1), 63 RunE: func(cmd *cobra.Command, args []string) error { 64 cliCtx := context.NewCLIContext().WithCodec(cdc) 65 66 addr, err := sdk.ValAddressFromBech32(args[0]) 67 if err != nil { 68 return err 69 } 70 71 res, _, err := cliCtx.QueryStore(types.GetValidatorKey(addr), storeName) 72 if err != nil { 73 return err 74 } 75 76 if len(res) == 0 { 77 return fmt.Errorf("no validator found with address %s", addr) 78 } 79 80 return cliCtx.PrintOutput(types.MustUnmarshalValidator(cdc, res)) 81 }, 82 } 83 } 84 85 // GetCmdQueryValidators implements the query all validators command. 86 func GetCmdQueryValidators(storeName string, cdc *codec.Codec) *cobra.Command { 87 return &cobra.Command{ 88 Use: "validators", 89 Short: "Query for all validators", 90 Args: cobra.NoArgs, 91 Long: strings.TrimSpace( 92 fmt.Sprintf(`Query details about all validators on a network. 93 94 Example: 95 $ %s query staking validators 96 `, 97 version.ClientName, 98 ), 99 ), 100 RunE: func(cmd *cobra.Command, args []string) error { 101 cliCtx := context.NewCLIContext().WithCodec(cdc) 102 103 resKVs, _, err := cliCtx.QuerySubspace(types.ValidatorsKey, storeName) 104 if err != nil { 105 return err 106 } 107 108 var validators types.Validators 109 for _, kv := range resKVs { 110 validators = append(validators, types.MustUnmarshalValidator(cdc, kv.Value)) 111 } 112 113 return cliCtx.PrintOutput(validators) 114 }, 115 } 116 } 117 118 // GetCmdQueryValidatorUnbondingDelegations implements the query all unbonding delegatations from a validator command. 119 func GetCmdQueryValidatorUnbondingDelegations(queryRoute string, cdc *codec.Codec) *cobra.Command { 120 return &cobra.Command{ 121 Use: "unbonding-delegations-from [validator-addr]", 122 Short: "Query all unbonding delegatations from a validator", 123 Long: strings.TrimSpace( 124 fmt.Sprintf(`Query delegations that are unbonding _from_ a validator. 125 126 Example: 127 $ %s query staking unbonding-delegations-from cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 128 `, 129 version.ClientName, 130 ), 131 ), 132 Args: cobra.ExactArgs(1), 133 RunE: func(cmd *cobra.Command, args []string) error { 134 cliCtx := context.NewCLIContext().WithCodec(cdc) 135 136 valAddr, err := sdk.ValAddressFromBech32(args[0]) 137 if err != nil { 138 return err 139 } 140 141 bz, err := cdc.MarshalJSON(types.NewQueryValidatorParams(valAddr)) 142 if err != nil { 143 return err 144 } 145 146 route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryValidatorUnbondingDelegations) 147 res, _, err := cliCtx.QueryWithData(route, bz) 148 if err != nil { 149 return err 150 } 151 152 var ubds types.UnbondingDelegations 153 cdc.MustUnmarshalJSON(res, &ubds) 154 return cliCtx.PrintOutput(ubds) 155 }, 156 } 157 } 158 159 // GetCmdQueryValidatorRedelegations implements the query all redelegatations 160 // from a validator command. 161 func GetCmdQueryValidatorRedelegations(queryRoute string, cdc *codec.Codec) *cobra.Command { 162 return &cobra.Command{ 163 Use: "redelegations-from [validator-addr]", 164 Short: "Query all outgoing redelegatations from a validator", 165 Long: strings.TrimSpace( 166 fmt.Sprintf(`Query delegations that are redelegating _from_ a validator. 167 168 Example: 169 $ %s query staking redelegations-from cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 170 `, 171 version.ClientName, 172 ), 173 ), 174 Args: cobra.ExactArgs(1), 175 RunE: func(cmd *cobra.Command, args []string) error { 176 cliCtx := context.NewCLIContext().WithCodec(cdc) 177 178 valSrcAddr, err := sdk.ValAddressFromBech32(args[0]) 179 if err != nil { 180 return err 181 } 182 183 bz, err := cdc.MarshalJSON(types.QueryRedelegationParams{SrcValidatorAddr: valSrcAddr}) 184 if err != nil { 185 return err 186 } 187 188 route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryRedelegations) 189 res, _, err := cliCtx.QueryWithData(route, bz) 190 if err != nil { 191 return err 192 } 193 194 var resp types.RedelegationResponses 195 if err := cdc.UnmarshalJSON(res, &resp); err != nil { 196 return err 197 } 198 199 return cliCtx.PrintOutput(resp) 200 }, 201 } 202 } 203 204 // GetCmdQueryDelegation the query delegation command. 205 func GetCmdQueryDelegation(queryRoute string, cdc *codec.Codec) *cobra.Command { 206 return &cobra.Command{ 207 Use: "delegation [delegator-addr] [validator-addr]", 208 Short: "Query a delegation based on address and validator address", 209 Long: strings.TrimSpace( 210 fmt.Sprintf(`Query delegations for an individual delegator on an individual validator. 211 212 Example: 213 $ %s query staking delegation cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 214 `, 215 version.ClientName, 216 ), 217 ), 218 Args: cobra.ExactArgs(2), 219 RunE: func(cmd *cobra.Command, args []string) error { 220 cliCtx := context.NewCLIContext().WithCodec(cdc) 221 222 delAddr, err := sdk.AccAddressFromBech32(args[0]) 223 if err != nil { 224 return err 225 } 226 227 valAddr, err := sdk.ValAddressFromBech32(args[1]) 228 if err != nil { 229 return err 230 } 231 232 bz, err := cdc.MarshalJSON(types.NewQueryBondsParams(delAddr, valAddr)) 233 if err != nil { 234 return err 235 } 236 237 route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryDelegation) 238 res, _, err := cliCtx.QueryWithData(route, bz) 239 if err != nil { 240 return err 241 } 242 243 var resp types.DelegationResponse 244 if err := cdc.UnmarshalJSON(res, &resp); err != nil { 245 return err 246 } 247 248 return cliCtx.PrintOutput(resp) 249 }, 250 } 251 } 252 253 // GetCmdQueryDelegations implements the command to query all the delegations 254 // made from one delegator. 255 func GetCmdQueryDelegations(queryRoute string, cdc *codec.Codec) *cobra.Command { 256 return &cobra.Command{ 257 Use: "delegations [delegator-addr]", 258 Short: "Query all delegations made by one delegator", 259 Long: strings.TrimSpace( 260 fmt.Sprintf(`Query delegations for an individual delegator on all validators. 261 262 Example: 263 $ %s query staking delegations cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p 264 `, 265 version.ClientName, 266 ), 267 ), 268 Args: cobra.ExactArgs(1), 269 RunE: func(cmd *cobra.Command, args []string) error { 270 cliCtx := context.NewCLIContext().WithCodec(cdc) 271 272 delAddr, err := sdk.AccAddressFromBech32(args[0]) 273 if err != nil { 274 return err 275 } 276 277 bz, err := cdc.MarshalJSON(types.NewQueryDelegatorParams(delAddr)) 278 if err != nil { 279 return err 280 } 281 282 route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryDelegatorDelegations) 283 res, _, err := cliCtx.QueryWithData(route, bz) 284 if err != nil { 285 return err 286 } 287 288 var resp types.DelegationResponses 289 if err := cdc.UnmarshalJSON(res, &resp); err != nil { 290 return err 291 } 292 293 return cliCtx.PrintOutput(resp) 294 }, 295 } 296 } 297 298 // GetCmdQueryValidatorDelegations implements the command to query all the 299 // delegations to a specific validator. 300 func GetCmdQueryValidatorDelegations(queryRoute string, cdc *codec.Codec) *cobra.Command { 301 return &cobra.Command{ 302 Use: "delegations-to [validator-addr]", 303 Short: "Query all delegations made to one validator", 304 Long: strings.TrimSpace( 305 fmt.Sprintf(`Query delegations on an individual validator. 306 307 Example: 308 $ %s query staking delegations-to cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 309 `, 310 version.ClientName, 311 ), 312 ), 313 Args: cobra.ExactArgs(1), 314 RunE: func(cmd *cobra.Command, args []string) error { 315 cliCtx := context.NewCLIContext().WithCodec(cdc) 316 317 valAddr, err := sdk.ValAddressFromBech32(args[0]) 318 if err != nil { 319 return err 320 } 321 322 bz, err := cdc.MarshalJSON(types.NewQueryValidatorParams(valAddr)) 323 if err != nil { 324 return err 325 } 326 327 route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryValidatorDelegations) 328 res, _, err := cliCtx.QueryWithData(route, bz) 329 if err != nil { 330 return err 331 } 332 333 var resp types.DelegationResponses 334 if err := cdc.UnmarshalJSON(res, &resp); err != nil { 335 return err 336 } 337 338 return cliCtx.PrintOutput(resp) 339 }, 340 } 341 } 342 343 // GetCmdQueryUnbondingDelegation implements the command to query a single 344 // unbonding-delegation record. 345 func GetCmdQueryUnbondingDelegation(queryRoute string, cdc *codec.Codec) *cobra.Command { 346 return &cobra.Command{ 347 Use: "unbonding-delegation [delegator-addr] [validator-addr]", 348 Short: "Query an unbonding-delegation record based on delegator and validator address", 349 Long: strings.TrimSpace( 350 fmt.Sprintf(`Query unbonding delegations for an individual delegator on an individual validator. 351 352 Example: 353 $ %s query staking unbonding-delegation cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 354 `, 355 version.ClientName, 356 ), 357 ), 358 Args: cobra.ExactArgs(2), 359 RunE: func(cmd *cobra.Command, args []string) error { 360 cliCtx := context.NewCLIContext().WithCodec(cdc) 361 362 valAddr, err := sdk.ValAddressFromBech32(args[1]) 363 if err != nil { 364 return err 365 } 366 367 delAddr, err := sdk.AccAddressFromBech32(args[0]) 368 if err != nil { 369 return err 370 } 371 372 bz, err := cdc.MarshalJSON(types.NewQueryBondsParams(delAddr, valAddr)) 373 if err != nil { 374 return err 375 } 376 377 route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryUnbondingDelegation) 378 res, _, err := cliCtx.QueryWithData(route, bz) 379 if err != nil { 380 return err 381 } 382 383 return cliCtx.PrintOutput(types.MustUnmarshalUBD(cdc, res)) 384 }, 385 } 386 } 387 388 // GetCmdQueryUnbondingDelegations implements the command to query all the 389 // unbonding-delegation records for a delegator. 390 func GetCmdQueryUnbondingDelegations(queryRoute string, cdc *codec.Codec) *cobra.Command { 391 return &cobra.Command{ 392 Use: "unbonding-delegations [delegator-addr]", 393 Short: "Query all unbonding-delegations records for one delegator", 394 Long: strings.TrimSpace( 395 fmt.Sprintf(`Query unbonding delegations for an individual delegator. 396 397 Example: 398 $ %s query staking unbonding-delegation cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p 399 `, 400 version.ClientName, 401 ), 402 ), 403 Args: cobra.ExactArgs(1), 404 RunE: func(cmd *cobra.Command, args []string) error { 405 cliCtx := context.NewCLIContext().WithCodec(cdc) 406 407 delegatorAddr, err := sdk.AccAddressFromBech32(args[0]) 408 if err != nil { 409 return err 410 } 411 412 bz, err := cdc.MarshalJSON(types.NewQueryDelegatorParams(delegatorAddr)) 413 if err != nil { 414 return err 415 } 416 417 route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryDelegatorUnbondingDelegations) 418 res, _, err := cliCtx.QueryWithData(route, bz) 419 if err != nil { 420 return err 421 } 422 423 var ubds types.UnbondingDelegations 424 if err = cdc.UnmarshalJSON(res, &ubds); err != nil { 425 return err 426 } 427 428 return cliCtx.PrintOutput(ubds) 429 }, 430 } 431 } 432 433 // GetCmdQueryRedelegation implements the command to query a single 434 // redelegation record. 435 func GetCmdQueryRedelegation(queryRoute string, cdc *codec.Codec) *cobra.Command { 436 return &cobra.Command{ 437 Use: "redelegation [delegator-addr] [src-validator-addr] [dst-validator-addr]", 438 Short: "Query a redelegation record based on delegator and a source and destination validator address", 439 Long: strings.TrimSpace( 440 fmt.Sprintf(`Query a redelegation record for an individual delegator between a source and destination validator. 441 442 Example: 443 $ %s query staking redelegation cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p cosmosvaloper1l2rsakp388kuv9k8qzq6lrm9taddae7fpx59wm cosmosvaloper1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 444 `, 445 version.ClientName, 446 ), 447 ), 448 Args: cobra.ExactArgs(3), 449 RunE: func(cmd *cobra.Command, args []string) error { 450 cliCtx := context.NewCLIContext().WithCodec(cdc) 451 452 delAddr, err := sdk.AccAddressFromBech32(args[0]) 453 if err != nil { 454 return err 455 } 456 457 valSrcAddr, err := sdk.ValAddressFromBech32(args[1]) 458 if err != nil { 459 return err 460 } 461 462 valDstAddr, err := sdk.ValAddressFromBech32(args[2]) 463 if err != nil { 464 return err 465 } 466 467 bz, err := cdc.MarshalJSON(types.NewQueryRedelegationParams(delAddr, valSrcAddr, valDstAddr)) 468 if err != nil { 469 return err 470 } 471 472 route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryRedelegations) 473 res, _, err := cliCtx.QueryWithData(route, bz) 474 if err != nil { 475 return err 476 } 477 478 var resp types.RedelegationResponses 479 if err := cdc.UnmarshalJSON(res, &resp); err != nil { 480 return err 481 } 482 483 return cliCtx.PrintOutput(resp) 484 }, 485 } 486 } 487 488 // GetCmdQueryRedelegations implements the command to query all the 489 // redelegation records for a delegator. 490 func GetCmdQueryRedelegations(queryRoute string, cdc *codec.Codec) *cobra.Command { 491 return &cobra.Command{ 492 Use: "redelegations [delegator-addr]", 493 Args: cobra.ExactArgs(1), 494 Short: "Query all redelegations records for one delegator", 495 Long: strings.TrimSpace( 496 fmt.Sprintf(`Query all redelegation records for an individual delegator. 497 498 Example: 499 $ %s query staking redelegation cosmos1gghjut3ccd8ay0zduzj64hwre2fxs9ld75ru9p 500 `, 501 version.ClientName, 502 ), 503 ), 504 RunE: func(cmd *cobra.Command, args []string) error { 505 cliCtx := context.NewCLIContext().WithCodec(cdc) 506 507 delAddr, err := sdk.AccAddressFromBech32(args[0]) 508 if err != nil { 509 return err 510 } 511 512 bz, err := cdc.MarshalJSON(types.QueryRedelegationParams{DelegatorAddr: delAddr}) 513 if err != nil { 514 return err 515 } 516 517 route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryRedelegations) 518 res, _, err := cliCtx.QueryWithData(route, bz) 519 if err != nil { 520 return err 521 } 522 523 var resp types.RedelegationResponses 524 if err := cdc.UnmarshalJSON(res, &resp); err != nil { 525 return err 526 } 527 528 return cliCtx.PrintOutput(resp) 529 }, 530 } 531 } 532 533 // GetCmdQueryHistoricalInfo implements the historical info query command 534 func GetCmdQueryHistoricalInfo(queryRoute string, cdc *codec.Codec) *cobra.Command { 535 return &cobra.Command{ 536 Use: "historical-info [height]", 537 Args: cobra.ExactArgs(1), 538 Short: "Query historical info at given height", 539 Long: strings.TrimSpace( 540 fmt.Sprintf(`Query historical info at given height. 541 542 Example: 543 $ %s query staking historical-info 5 544 `, 545 version.ClientName, 546 ), 547 ), 548 RunE: func(cmd *cobra.Command, args []string) error { 549 cliCtx := context.NewCLIContext().WithCodec(cdc) 550 551 height, err := strconv.ParseInt(args[0], 10, 64) 552 if err != nil || height < 0 { 553 return fmt.Errorf("height argument provided must be a non-negative-integer: %v", err) 554 } 555 556 bz, err := cdc.MarshalJSON(types.QueryHistoricalInfoParams{Height: height}) 557 if err != nil { 558 return err 559 } 560 561 route := fmt.Sprintf("custom/%s/%s", queryRoute, types.QueryHistoricalInfo) 562 res, _, err := cliCtx.QueryWithData(route, bz) 563 if err != nil { 564 return err 565 } 566 567 var resp types.HistoricalInfo 568 if err := cdc.UnmarshalJSON(res, &resp); err != nil { 569 return err 570 } 571 572 return cliCtx.PrintOutput(resp) 573 }, 574 } 575 } 576 577 // GetCmdQueryPool implements the pool query command. 578 func GetCmdQueryPool(storeName string, cdc *codec.Codec) *cobra.Command { 579 return &cobra.Command{ 580 Use: "pool", 581 Args: cobra.NoArgs, 582 Short: "Query the current staking pool values", 583 Long: strings.TrimSpace( 584 fmt.Sprintf(`Query values for amounts stored in the staking pool. 585 586 Example: 587 $ %s query staking pool 588 `, 589 version.ClientName, 590 ), 591 ), 592 RunE: func(cmd *cobra.Command, args []string) error { 593 cliCtx := context.NewCLIContext().WithCodec(cdc) 594 595 bz, _, err := cliCtx.QueryWithData(fmt.Sprintf("custom/%s/pool", storeName), nil) 596 if err != nil { 597 return err 598 } 599 600 var pool types.Pool 601 if err := cdc.UnmarshalJSON(bz, &pool); err != nil { 602 return err 603 } 604 605 return cliCtx.PrintOutput(pool) 606 }, 607 } 608 } 609 610 // GetCmdQueryParams implements the params query command. 611 func GetCmdQueryParams(storeName string, cdc *codec.Codec) *cobra.Command { 612 return &cobra.Command{ 613 Use: "params", 614 Args: cobra.NoArgs, 615 Short: "Query the current staking parameters information", 616 Long: strings.TrimSpace( 617 fmt.Sprintf(`Query values set as staking parameters. 618 619 Example: 620 $ %s query staking params 621 `, 622 version.ClientName, 623 ), 624 ), 625 RunE: func(cmd *cobra.Command, args []string) error { 626 cliCtx := context.NewCLIContext().WithCodec(cdc) 627 628 route := fmt.Sprintf("custom/%s/%s", storeName, types.QueryParameters) 629 bz, _, err := cliCtx.QueryWithData(route, nil) 630 if err != nil { 631 return err 632 } 633 634 var params types.Params 635 cdc.MustUnmarshalJSON(bz, ¶ms) 636 return cliCtx.PrintOutput(params) 637 }, 638 } 639 }