# Client

### CLI <a href="#cli" id="cli"></a>

A user can query and interact with the `distribution` module using the CLI.

#### Query <a href="#query" id="query"></a>

The `query` commands allow users to query `distribution` state.

```
simd query distribution --help
```

**commission**

The `commission` command allows users to query validator commission rewards by address.

```
simd query distribution commission [address] [flags]
```

Example:

```
simd query distribution commission cosmosvaloper1..
```

Example output:

```
commission:
- amount: "1000000.000000000000000000"
  denom: stake
```

**community-pool**

The `community-pool` command allows users to query all coin balances within the community pool.

```
simd query distribution community-pool [flags]
```

Example:

```
simd query distribution community-pool
```

Example output:

```
pool:
- amount: "1000000.000000000000000000"
  denom: stake
```

**params**

The `params` command allows users to query the parameters of the `distribution` module.

```
simd query distribution params [flags]
```

Example:

```
simd query distribution params
```

Example output:

```
base_proposer_reward: "0.010000000000000000"
bonus_proposer_reward: "0.040000000000000000"
community_tax: "0.020000000000000000"
withdraw_addr_enabled: true
```

**rewards**

The `rewards` command allows users to query delegator rewards. Users can optionally include the validator address to query rewards earned from a specific validator.

```
simd query distribution rewards [delegator-addr] [validator-addr] [flags]
```

Example:

```
simd query distribution rewards cosmos1..
```

Example output:

```
rewards:
- reward:
  - amount: "1000000.000000000000000000"
    denom: stake
  validator_address: cosmosvaloper1..
total:
- amount: "1000000.000000000000000000"
  denom: stake
```

**slashes**

The `slashes` command allows users to query all slashes for a given block range.

```
simd query distribution slashes [validator] [start-height] [end-height] [flags]
```

Example:

```
simd query distribution slashes cosmosvaloper1.. 1 1000
```

Example output:

```
pagination:
  next_key: null
  total: "0"
slashes:
- validator_period: 20,
  fraction: "0.009999999999999999"
```

**validator-outstanding-rewards**

The `validator-outstanding-rewards` command allows users to query all outstanding (un-withdrawn) rewards for a validator and all their delegations.

```
simd query distribution validator-outstanding-rewards [validator] [flags]
```

Example:

```
simd query distribution validator-outstanding-rewards cosmosvaloper1..
```

Example output:

```
rewards:
- amount: "1000000.000000000000000000"
  denom: stake
```

#### Transactions <a href="#transactions" id="transactions"></a>

The `tx` commands allow users to interact with the `distribution` module.

```
simd tx distribution --help
```

**fund-community-pool**

The `fund-community-pool` command allows users to send funds to the community pool.

```
simd tx distribution fund-community-pool [amount] [flags]
```

Example:

```
simd tx distribution fund-community-pool 100stake --from cosmos1..
```

**set-withdraw-addr**

The `set-withdraw-addr` command allows users to set the withdraw address for rewards associated with a delegator address.

```
simd tx distribution set-withdraw-addr [withdraw-addr] [flags]
```

Example:

```
simd tx distribution set-withdraw-addr cosmos1.. --from cosmos1..
```

**withdraw-all-rewards**

The `withdraw-all-rewards` command allows users to withdraw all rewards for a delegator.

```
simd tx distribution withdraw-all-rewards [flags]
```

Example:

```
simd tx distribution withdraw-all-rewards --from cosmos1..
```

**withdraw-rewards**

The `withdraw-rewards` command allows users to withdraw all rewards from a given delegation address, and optionally withdraw validator commission if the delegation address given is a validator operator and the user proves the `--commision` flag.

```
simd tx distribution withdraw-rewards [validator-addr] [flags]
```

Example:

```
simd tx distribution withdraw-rewards cosmosvaloper1.. --from cosmos1.. --commision
```

### gRPC <a href="#grpc" id="grpc"></a>

A user can query the `distribution` module using gRPC endpoints.

#### Params <a href="#params-2" id="params-2"></a>

The `Params` endpoint allows users to query parameters of the `distribution` module.

Example:

```
grpcurl -plaintext \
    localhost:9090 \
    cosmos.distribution.v1beta1.Query/Params
```

Example output:

```json
{
  "params": {
    "communityTax": "20000000000000000",
    "baseProposerReward": "10000000000000000",
    "bonusProposerReward": "40000000000000000",
    "withdrawAddrEnabled": true
  }
}
```

#### ValidatorOutstandingRewards <a href="#validatoroutstandingrewards" id="validatoroutstandingrewards"></a>

The `ValidatorOutstandingRewards` endpoint allows users to query rewards of a validator address.

Example:

```
grpcurl -plaintext \
    -d '{"validator_address":"cosmosvalop1.."}' \
    localhost:9090 \
    cosmos.distribution.v1beta1.Query/ValidatorOutstandingRewards
```

Example output:

```json
{
  "rewards": {
    "rewards": [
      {
        "denom": "stake",
        "amount": "1000000000000000"
      }
    ]
  }
}
```

#### ValidatorCommission <a href="#validatorcommission" id="validatorcommission"></a>

The `ValidatorCommission` endpoint allows users to query accumulated commission for a validator.

Example:

```
grpcurl -plaintext \
    -d '{"validator_address":"cosmosvalop1.."}' \
    localhost:9090 \
    cosmos.distribution.v1beta1.Query/ValidatorCommission
```

Example output:

```json
{
  "commission": {
    "commission": [
      {
        "denom": "stake",
        "amount": "1000000000000000"
      }
    ]
  }
}
```

#### ValidatorSlashes <a href="#validatorslashes" id="validatorslashes"></a>

The `ValidatorSlashes` endpoint allows users to query slash events of a validator.

Example:

```
grpcurl -plaintext \
    -d '{"validator_address":"cosmosvalop1.."}' \
    localhost:9090 \
    cosmos.distribution.v1beta1.Query/ValidatorSlashes
```

Example output:

```json
{
  "slashes": [
    {
      "validator_period": "20",
      "fraction": "0.009999999999999999"
    }
  ],
  "pagination": {
    "total": "1"
  }
}
```

#### DelegationRewards <a href="#delegationrewards" id="delegationrewards"></a>

The `DelegationRewards` endpoint allows users to query the total rewards accrued by a delegation.

Example:

```
grpcurl -plaintext \
    -d '{"delegator_address":"cosmos1..","validator_address":"cosmosvalop1.."}' \
    localhost:9090 \
    cosmos.distribution.v1beta1.Query/DelegationRewards
```

Example output:

```json
{
  "rewards": [
    {
      "denom": "stake",
      "amount": "1000000000000000"
    }
  ]
}
```

#### DelegationTotalRewards <a href="#delegationtotalrewards" id="delegationtotalrewards"></a>

The `DelegationTotalRewards` endpoint allows users to query the total rewards accrued by each validator.

Example:

```
grpcurl -plaintext \
    -d '{"delegator_address":"cosmos1.."}' \
    localhost:9090 \
    cosmos.distribution.v1beta1.Query/DelegationTotalRewards
```

Example output:

```json
{
  "rewards": [
    {
      "validatorAddress": "cosmosvaloper1..",
      "reward": [
        {
          "denom": "stake",
          "amount": "1000000000000000"
        }
      ]
    }
  ],
  "total": [
    {
      "denom": "stake",
      "amount": "1000000000000000"
    }
  ]
}
```

#### DelegatorValidators <a href="#delegatorvalidators" id="delegatorvalidators"></a>

The `DelegatorValidators` endpoint allows users to query all validators for given delegator.

Example:

```
grpcurl -plaintext \
    -d '{"delegator_address":"cosmos1.."}' \
    localhost:9090 \
    cosmos.distribution.v1beta1.Query/DelegatorValidators
```

Example output:

```json
{
  "validators": [
    "cosmosvaloper1.."
  ]
}
```

#### DelegatorWithdrawAddress <a href="#delegatorwithdrawaddress" id="delegatorwithdrawaddress"></a>

The `DelegatorWithdrawAddress` endpoint allows users to query the withdraw address of a delegator.

Example:

```
grpcurl -plaintext \
    -d '{"delegator_address":"cosmos1.."}' \
    localhost:9090 \
    cosmos.distribution.v1beta1.Query/DelegatorWithdrawAddress
```

Example output:

```json
{
  "withdrawAddress": "cosmos1.."
}
```

#### CommunityPool <a href="#communitypool" id="communitypool"></a>

The `CommunityPool` endpoint allows users to query the community pool coins.

Example:

```bash
grpcurl -plaintext \
    localhost:9090 \
    cosmos.distribution.v1beta1.Query/CommunityPool
```

Example output:

```json
{
  "pool": [
    {
      "denom": "stake",
      "amount": "1000000000000000000"
    }
  ]
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.metanovaverse.com/protocol-developers/modules/distribution/client.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
