# Polygon Vault

`PolygonVault` manages deposits of POL into a Polygon validator delegation contract.

## View Functions

### token

Returns the address of the staking token (POL).

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

#### Return Values

| Name  | Type    | Description       |
| ----- | ------- | ----------------- |
| token | address | POL token address |

### vaultController

Returns the address of the strategy that controls this vault.

```solidity
function vaultController() public view returns (address)
```

#### Return Values

| Name            | Type    | Description              |
| --------------- | ------- | ------------------------ |
| vaultController | address | Vault controller address |

### stakeManager

Returns the address of the Polygon stake manager contract.

```solidity
function stakeManager() public view returns (address)
```

#### Return Values

| Name         | Type    | Description           |
| ------------ | ------- | --------------------- |
| stakeManager | address | Stake manager address |

### validatorPool

Returns the address of the Polygon validator delegation contract.

```solidity
function validatorPool() public view returns (address)
```

#### Return Values

| Name          | Type    | Description            |
| ------------- | ------- | ---------------------- |
| validatorPool | address | Validator pool address |

### getTotalDeposits

Returns the total balance of this contract (principal, rewards, queued withdrawals, and tokens held).

```solidity
function getTotalDeposits() public view returns (uint256)
```

#### Return Values

| Name          | Type    | Description   |
| ------------- | ------- | ------------- |
| totalDeposits | uint256 | Total balance |

### getPrincipalDeposits

Returns the principal balance of this contract in the validator pool.

```solidity
function getPrincipalDeposits() public view returns (uint256)
```

#### Return Values

| Name              | Type    | Description       |
| ----------------- | ------- | ----------------- |
| principalDeposits | uint256 | Principal balance |

### getRewards

Returns the claimable rewards balance of this contract in the validator pool.

```solidity
function getRewards() public view returns (uint256)
```

#### Return Values

| Name    | Type    | Description       |
| ------- | ------- | ----------------- |
| rewards | uint256 | Claimable rewards |

### getQueuedWithdrawals

Returns the amount of queued withdrawals for this contract in the validator pool.

```solidity
function getQueuedWithdrawals() public view returns (uint256)
```

#### Return Values

| Name              | Type    | Description        |
| ----------------- | ------- | ------------------ |
| queuedWithdrawals | uint256 | Queued withdrawals |

### isWithdrawable

Returns whether deposits can be withdrawn from the validator pool.

```solidity
function isWithdrawable() external view returns (bool)
```

#### Return Values

| Name         | Type | Description                           |
| ------------ | ---- | ------------------------------------- |
| withdrawable | bool | true if withdrawable, false otherwise |

### isUnbonding

Returns whether this vault is currently unbonding.

```solidity
function isUnbonding() external view returns (bool)
```

#### Return Values

| Name      | Type | Description                        |
| --------- | ---- | ---------------------------------- |
| unbonding | bool | true if unbonding, false otherwise |

### minRewardClaimAmount

Returns the minimum amount of rewards that can be claimed/restaked.

```solidity
function minRewardClaimAmount() external view returns (uint256)
```

#### Return Values

| Name      | Type    | Description       |
| --------- | ------- | ----------------- |
| minAmount | uint256 | Minimum claimable |

## Write Functions

### deposit

Deposits tokens from the vault controller into the validator pool.

```solidity
function deposit(uint256 _amount) external
```

#### Parameters

| Name     | Type    | Description       |
| -------- | ------- | ----------------- |
| \_amount | uint256 | Amount to deposit |

### withdraw

Withdraws tokens from the validator pool and sends them to the vault controller.

```solidity
function withdraw() external returns (uint256)
```

#### Return Values

| Name   | Type    | Description      |
| ------ | ------- | ---------------- |
| amount | uint256 | Amount withdrawn |

### unbond

Queues tokens for withdrawal in the validator pool.

```solidity
function unbond(uint256 _amount) external
```

#### Parameters

| Name     | Type    | Description      |
| -------- | ------- | ---------------- |
| \_amount | uint256 | Amount to unbond |

### restakeRewards

Restakes rewards in the validator pool.

```solidity
function restakeRewards() external
```

### withdrawRewards

Withdraws rewards from the validator pool.

```solidity
function withdrawRewards() external
```
