# Rewards Pool

`RewardsPool` handles the distribution of a single token to a parent pool such as the `SDLPool`. A parent pool may control multiple `RewardsPools` if stakers receive rewards in the form of multiple different tokens.

## View Functions

### token

Returns the address of the rewards token this pool distributes

```solidity
function token() external view returns (address)
```

#### Return Values

| Name  | Type    | Description              |
| ----- | ------- | ------------------------ |
| token | address | Address of rewards token |

### withdrawableRewards

Returns an account's total unclaimed rewards

```solidity
function withdrawableRewards(address _account) public view returns (uint256)
```

#### Parameters

| Name      | Type    | Description        |
| --------- | ------- | ------------------ |
| \_account | address | Address of account |

#### Return Values

| Name    | Type    | Description             |
| ------- | ------- | ----------------------- |
| rewards | uint256 | Total unclaimed rewards |

## Write Functions

### withdraw

Withdraws the sender's unclaimed rewards

```solidity
function withdraw() external
```

### withdraw

Withdraws an account's unclaimed rewards

```solidity
function withdraw(address _account) external
```

#### Parameters

| Name      | Type    | Description             |
| --------- | ------- | ----------------------- |
| \_account | address | Account to withdraw for |

### onTokenTransfer

ERC677 implementation that receives rewards and distributes them

```solidity
function onTokenTransfer(address, uint256, bytes) external
```

### distributeRewards

Distributes new rewards that have been deposited

```solidity
function distributeRewards() public
```

### updateReward

Updates an account's principal reward balance

```solidity
function updateReward(address _account) public
```

#### Parameters

| Name      | Type    | Description        |
| --------- | ------- | ------------------ |
| \_account | address | Address of account |
