# PCVGuardian

## Functions

### constructor

```solidity
function constructor(
    address _core,
    address[] _safeAddresses
) public
```

#### Parameters

| Name             | Type       | Description |
| ---------------- | ---------- | ----------- |
| `_core`          | address    |             |
| `_safeAddresses` | address\[] |             |

### isSafeAddress

```solidity
function isSafeAddress(
    address pcvDeposit
) public returns (bool)
```

returns true if the the provided address is a valid destination to withdraw funds to

#### Parameters

| Name         | Type    | Description          |
| ------------ | ------- | -------------------- |
| `pcvDeposit` | address | the address to check |

### getSafeAddresses

```solidity
function getSafeAddresses() public returns (address[])
```

returns all safe addresses

### setSafeAddress

```solidity
function setSafeAddress(
    address pcvDeposit
) external
```

governor-only method to set an address as "safe" to withdraw funds to

#### Parameters

| Name         | Type    | Description                |
| ------------ | ------- | -------------------------- |
| `pcvDeposit` | address | the address to set as safe |

### setSafeAddresses

```solidity
function setSafeAddresses(
    address[] _safeAddresses
) external
```

batch version of setSafeAddress

#### Parameters

| Name             | Type       | Description                               |
| ---------------- | ---------- | ----------------------------------------- |
| `_safeAddresses` | address\[] | the addresses to set as safe, as calldata |

### unsetSafeAddress

```solidity
function unsetSafeAddress(
    address pcvDeposit
) external
```

governor-or-guardian-only method to un-set an address as "safe" to withdraw funds to

#### Parameters

| Name         | Type    | Description                   |
| ------------ | ------- | ----------------------------- |
| `pcvDeposit` | address | the address to un-set as safe |

### unsetSafeAddresses

```solidity
function unsetSafeAddresses(
    address[] _safeAddresses
) external
```

batch version of unsetSafeAddresses

#### Parameters

| Name             | Type       | Description                     |
| ---------------- | ---------- | ------------------------------- |
| `_safeAddresses` | address\[] | the addresses to un-set as safe |

### withdrawToSafeAddress

```solidity
function withdrawToSafeAddress(
    address pcvDeposit,
    address safeAddress,
    uint256 amount,
    bool pauseAfter,
    bool depositAfter
) external
```

governor-or-guardian-only method to withdraw funds from a pcv deposit, by calling the withdraw() method on it

#### Parameters

| Name           | Type    | Description                                                 |
| -------------- | ------- | ----------------------------------------------------------- |
| `pcvDeposit`   | address | the address of the pcv deposit contract                     |
| `safeAddress`  | address | the destination address to withdraw to                      |
| `amount`       | uint256 | the amount to withdraw                                      |
| `pauseAfter`   | bool    | if true, the pcv contract will be paused after the withdraw |
| `depositAfter` | bool    | if true, attempts to deposit to the target PCV deposit      |

### withdrawETHToSafeAddress

```solidity
function withdrawETHToSafeAddress(
    address pcvDeposit,
    address payable safeAddress,
    uint256 amount,
    bool pauseAfter,
    bool depositAfter
) external
```

governor-or-guardian-only method to withdraw funds from a pcv deposit, by calling the withdraw() method on it

#### Parameters

| Name           | Type            | Description                                                 |
| -------------- | --------------- | ----------------------------------------------------------- |
| `pcvDeposit`   | address         | the address of the pcv deposit contract                     |
| `safeAddress`  | address payable | the destination address to withdraw to                      |
| `amount`       | uint256         | the amount of tokens to withdraw                            |
| `pauseAfter`   | bool            | if true, the pcv contract will be paused after the withdraw |
| `depositAfter` | bool            | if true, attempts to deposit to the target PCV deposit      |

### withdrawERC20ToSafeAddress

```solidity
function withdrawERC20ToSafeAddress(
    address pcvDeposit,
    address safeAddress,
    address token,
    uint256 amount,
    bool pauseAfter,
    bool depositAfter
) external
```

governor-or-guardian-only method to withdraw funds from a pcv deposit, by calling the withdraw() method on it

#### Parameters

| Name           | Type    | Description                                            |
| -------------- | ------- | ------------------------------------------------------ |
| `pcvDeposit`   | address | the deposit to pull funds from                         |
| `safeAddress`  | address | the destination address to withdraw to                 |
| `token`        | address |                                                        |
| `amount`       | uint256 | the amount of funds to withdraw                        |
| `pauseAfter`   | bool    | whether to pause the pcv after withdrawing             |
| `depositAfter` | bool    | if true, attempts to deposit to the target PCV deposit |

### \_setSafeAddress

```solidity
function _setSafeAddress(
    address anAddress
) internal
```

#### Parameters

| Name        | Type    | Description |
| ----------- | ------- | ----------- |
| `anAddress` | address |             |

### \_unsetSafeAddress

```solidity
function _unsetSafeAddress(
    address anAddress
) internal
```

#### Parameters

| Name        | Type    | Description |
| ----------- | ------- | ----------- |
| `anAddress` | address |             |


---

# 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.essencefinance.io/development/smart-contracts/pcv/pcvguardian.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.
