# 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"
    }
  ]
}
```
