# 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
```


---

# 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.stake.link/pol-staking-contracts/polygonvault.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.
